אלגוריתם mergesort
נתחיל בהבנה של מה זה מיזוג: קחי שני מערכים ממוינים שבכל אחד מהם יש 10 נתונים. אומרים לך שיש לך מערך ריק שבו יש 20 תאים, ואת צריכה לשפוך את המערכים לתוכו. איך תעשי זאת? יש לך שני אינדקסים - אחד על המערך הראשון, ואחד על המערך השני. בכל פעם את לוקחת את הנתון הקטן מבין השניים, ומתקדמת עם האינדקס של המערך שלקחת - בצעד אחד. אם הם שווים, את לוקחת את הנתון מהמערך הראשון. למשל:
Array 1 = 3, 7, 23, 26, 32, 54, 55, 87, 91, 93 Array 2 = 1, 7, 14, 23, 24, 25, 55, 87, 92, 92
עכשיו - האינדקסים בהתחלה מצביעים לתאים הראשונים במערך. לוקחים את הנתון "1" מתוך המערך השני, ומכניסים אותו למערך התוצאה. מקדמים את האינדקס במערך השני ל - 2 (האינדקס במערך הראשון עדיין שווה ל - 1); ממשיכים עם הנתון "3" מתוך המערך הראשון (כי עכשיו משווים בין ה - 3 לבין ה - 7), וכן הלאה - עד שהכל ממוין. עכשיו, כשאת יודעת איך לוקחים שתי קבוצות וממזגים אותן לתוך מערך אחד, איך עובד merge sort? הרעיון הוא לקחת את המערך, לחתוך אותו כל פעם באמצע, למיין כל חלק בעזרת mergesort, ולהפעיל את פעולת ה - merge על שני החלקים שמוינו. שימי לב, שההגדרה מכילה קריאה לאלגוריתם עצמו מתוכו - כלומר, רקורסיה. אם היה לך מערך בגודל של 8 נתונים, למשל, האלגוריתם היה כזה: חלקי את המערך לשני חלקים (כל אחד 4 נתונים) מייני את החלק הימני .. חלקי את המערך לשני חלקים (כל אחד 2 נתונים) .. מייני את החלק הימני - זה שני נתונים ולכן אפשר לבצע זאת "ידנית" .. מייני את החלק השמאלי - זה שני נתונים ולכן אפשר לבצע זאת "ידנית" .. מזגי את שני החלקים מייני את החלק השמאלי .. חלקי את המערך לשני חלקים (כל אחד 2 נתונים) .. מייני את החלק הימני - זה שני נתונים ולכן אפשר לבצע זאת "ידנית" .. מייני את החלק השמאלי - זה שני נתונים ולכן אפשר לבצע זאת "ידנית" .. מזגי את שני החלקים מזגי את שני החלקים וזהו - יש לך מערך ממוין! פה נתתי דוגמה מאוד פשוטה, אבל רקורסיבית אפשר למיין הרבה יותר. בהצלחה!