ערכתי לאחרונה בתאריך 22.09.13 בשעה 08:39 בברכה, VeNom
שמי שבנה את האלגוריתם הזה למיון טען שאפשר לעשות אותו ג'נרי לגמרי.
זה אומר שאם יום אחד תרצה למיין מספרים אתה תוכל.
יום אחר תרצה למיין מחרוזות? גם תוכל.
יום אחד תרצה למיין סטודנטים לפי קריטריון מסוים גם תוכל.איך הוא עשה את זה? הוא בנה שלד שידע לקבל פונקציה פשוטה שמשווה בין 2 ערכים ולהריץ אותה במקום לשאול אם A גדול מ B(בעצם מה זה A גדול מ B? אם A הוא סטודנט איך נדע לפי מה נרצה למיין אותו?)
עכשיו נניח ואתה רוצה להשתמש ב QS לטובת מיון מספרים שלמים. אתה תממש פונקציה כזו..
int compare (const void * a, const void * b) { return ( *(int*)a - *(int*)b ); }
|
אם תרצה למיין משהו אחר, תממש משהו אחר ותשלח ל QS פוינטר לפונקציה..
אגב, אני לא ממש זוכר C ברמה הזו אבל נראה לי שאתה יכול לממש פונקציה עם PROTOTYPE רלוונטי(כלומר שהפרמטרים לא יהיו VOID* אלא INT*)..משהו כזה:
int compare (const int* a, const int* b) { return a-b; }
|
אתה מעביר לפונקציה את הCOMPARER פשוט כמשתנה למניין(אם קראת לפונקציה compare אז אתה מעביר אותה כפרמטר בשם compare):
משהו כזה:
qs(arr, 50, sizeof(int), compare);
|