כיצד למיין מערכים עם qsort() ב-C

Kyzd Lmyyn M Rkym M Qsort B C



מיון היא פעולה בסיסית בתכנות מחשבים, והיא כרוכה בסידור אוסף נתונים לפי סדר מסוים. אחת הדרכים למיין מערך של אלמנטים ב-C היא להשתמש ב- qsort() function, שהיא חלק מהספרייה הסטנדרטית. פונקציה זו לוקחת מערך, גודלו ופונקציית השוואה כארגומנטים וממיינת את המערך בסדר עולה כברירת מחדל.

הנחיה זו ממחישה את המיון של מערכים באמצעות ה qsort() פונקציה ב-C וגם עוזרת לך להבין אותה באמצעות קודי C לדוגמה.

qsort() ב-C

ספריית תקן C מקלה עלינו qsort() פונקציה המשמשת פשוט למיון מערכים. זוהי פונקציה אופטימלית ומהירה במיוחד שיכולה לפעול עם כל מערך סוגי נתונים.







Header-File באמצעות qsort() ב-C

ה qsort() השיטה מוגדרת בתוך stdlib.h קובץ header, אותו יש להגדיר לפני היישום qsort() בתוכנית C.



#include

הצהרת qsort()

ההכרזה של qsort() הפונקציה היא כדלקמן:



בָּטֵל qsort ( בָּטֵל * בסיס , מספר_האלמנטים , size_of_element , פונקציית_השוואה )

פרמטרים של פונקציית qsort()

הפרמטרים של qsort() הפונקציה הם:





בסיס: מצביע לרכיב הראשון של המערך שיש למיין.

מספר_האלמנטים: מספר האלמנטים במערך שיש למיין.



size_of_element: גודל בבתים של כל אלמנט במערך.

פונקציית_השוואה: מצביע לפונקציית השוואה המגדירה את סדר האלמנטים.

מהי פונקציית השוואה ב-qsort()

פונקציית ההשוואה לוקחת שני פרמטרים, שניהם מסוג const void*, המצביעים על האלמנטים שמשווים. הפונקציה צריכה להחזיר מספר שלם קטן מ-, שווה או גדול מ-0, תלוי אם יש למיין את האלמנט הראשון לפני, באותו מיקום, או אחרי האלמנט השני, בהתאמה.

איך qsort עובד ב-C

ה qsort() הפונקציה פועלת בצורה הבאה:

הערה: כאן אנו שוקלים א int arr[] = {5, 2, 8, 3, 1, 9};

1: בתחילה, הפונקציה qsort תיקרא עם הפרמטרים הבאים:

qsort ( arr , 6 , מידה של ( int ) , פונקציית_השוואה ) ;

כאשר arr הוא המצביע למערך, 6 הוא מספר האלמנטים במערך, sizeof(int) הוא הגודל של כל אלמנט במערך, ו- comparison_function היא הפונקציה שקובעת את סדר מיון האלמנטים.

2: הפונקציה qsort בוחרת אלמנט pivot. נניח שהוא בוחר 3 בתור הציר.

3: הפונקציה qsort מחלקת את המערך לשני מערכי משנה: {2, 1} ו-{5, 8, 9}. תת המערך הראשון מכיל אלמנטים שקטנים או שווים לציר, ומערך המשנה השני מכיל אלמנטים שגדולים מהציר.

4: הפונקציה qsort קוראת לעצמה באופן רקורסיבי בכל אחד ממערכי המשנה.

5: הפונקציה qsort בוחרת צירים עבור כל אחד ממערכי המשנה. נניח שהוא בוחר 1 ו-8 בתור הצירים.

6: הפונקציה qsort מחלקת כל תת-מערך לשני מערכי משנה נוספים, וקוראת לעצמה באופן רקורסיבי בכל אחד מתתי-מערכי אלו.

7: הפונקציה qsort משלבת את מערכי המשנה הממוינים בחזרה למערך ממוין יחיד: {1, 2} ו-{5, 8, 9} הופכים ל-{1, 2, 5, 8, 9}.

8: כל המערך הממוין מוחזר.

יישום qsort בתכנות C

הקוד הבא מציג את היישום של qsort פונקציה בתכנות C.

#include

#include

int לְהַשְׁווֹת ( const בָּטֵל * a1 , const בָּטֵל * b1 )

{

לַחֲזוֹר ( * ( int * ) a1 - * ( int * ) b1 ) ;

}

int רָאשִׁי ( )

{

int אני = 0 , על אחד = 6 ;

int מַעֲרָך [ ] = { 5 , 2 , 8 , 3 , 1 , 9 } ;

qsort ( מַעֲרָך , על אחד , מידה של ( int ) , לְהַשְׁווֹת ) ;

printf ( 'אלמנטים ממוינים של מערך באמצעות qsort() הם: ' ) ;

ל ( אני = 0 ; אני < על אחד ; אני ++ ) {

printf ( '%d' , מַעֲרָך [ אני ] ) ; }

לַחֲזוֹר 0 ;

}

בקוד שלמעלה, ראשית, מתבצעת פונקציית השוואה עם שני פרמטרים a1 ו b1 . אז הביצוע מתחיל מ-main(). בעיקרון, אנו מאתחלים שני משתנים שלמים כ-i=0 ו-num=6. לאחר מכן אנו מכריזים על מערך עם שישה אלמנטים כ {5, 2, 8, 3, 1, 9} . אחרי זה qsort() יש שלושה פרמטרים מסוג מערך, הפרמטר num אומר את סך הרכיבים של מערך, sizeof(int) מתייחס לגודל הכולל של המערך, והשוואה משמשת להשוואת רכיבי מערך אחד אחד. לאחר מכן הדפס את המערך הממוין באמצעות printf() פונקציה ב-C.

תְפוּקָה

סיכום

qsort היא פונקציה רבת עוצמה בתכנות C למיון מערכים מכל סוג. הוא משתמש באלגוריתם מיון מהיר כדי למיין את האלמנטים בסדר עולה או יורד בהתבסס על פונקציית השוואה. המדריך לעיל מראה לך דרך קלה ליישם qsort בתכנות C עם עבודה שלב אחר שלב של qsort אַלגוֹרִיתְם.