פעולת swap – החלפה
כל שיטות המיון משתמשות בהחלפה בין שני איברים:
public static void swap(int[] arr, int i, int j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; }
מיון בחירה (Selection Sort)
רעיון: בכל סיבוב, מוצאים את האיבר הקטן ביותר מהחלק הלא-ממוין ומחליפים אותו עם האיבר הראשון בחלק הלא-ממוין.
שלבים עבור {64, 25, 12, 22, 11}:
| שלב | מערך | פעולה |
|---|---|---|
| 0 | 11 25 12 22 64 | מינימום 11, החלפה עם 64 |
| 1 | 11 12 25 22 64 | מינימום 12, החלפה עם 25 |
| 2 | 11 12 22 25 64 | מינימום 22, החלפה עם 25 |
| 3 | 11 12 22 25 64 | מינימום 25, כבר במקום |
public static void selectionSort(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { int minIndex = i; for (int j = i + 1; j < arr.length; j++) { if (arr[j] < arr[minIndex]) minIndex = j; } swap(arr, i, minIndex); } }
מיון בועות (Bubble Sort)
רעיון: עוברים שוב ושוב על המערך, משווים זוגות שכנים ומחליפים אם הם בסדר לא נכון. האיברים הגדולים "צפים" למעלה כמו בועות.
public static void bubbleSort(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { for (int j = 0; j < arr.length - 1 - i; j++) { if (arr[j] > arr[j + 1]) swap(arr, j, j + 1); } } }
שיפור – עצירה מוקדמת
אם בסיבוב שלם לא בוצעה אף החלפה, המערך כבר ממוין:
public static void bubbleSortOptimized(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { boolean swapped = false; for (int j = 0; j < arr.length - 1 - i; j++) { if (arr[j] > arr[j + 1]) { swap(arr, j, j + 1); swapped = true; } } if (!swapped) break; } }
מיון הכנסה (Insertion Sort)
רעיון: כמו סידור קלפים ביד – לוקחים כל איבר ומכניסים אותו למקום הנכון בחלק הממוין (שמשמאל).
public static void insertionSort(int[] arr) { for (int i = 1; i < arr.length; i++) { int key = arr[i]; int j = i - 1; while (j >= 0 && arr[j] > key) { arr[j + 1] = arr[j]; j--; } arr[j + 1] = key; } }
השוואה – טבלת סיכום
| שיטה | מקרה גרוע | מקרה טוב | יציבות | רעיון |
|---|---|---|---|---|
| מיון בחירה | O(n²) | O(n²) | לא יציב | מצא מינימום והחלף |
| מיון בועות | O(n²) | O(n)* | יציב | החלף שכנים |
| מיון הכנסה | O(n²) | O(n) | יציב | הכנס למקום הנכון |
*מיון בועות O(n) במקרה טוב רק עם השיפור (עצירה מוקדמת).
יציבות – מיון יציב שומר על הסדר היחסי של איברים שווים.
שאלות נפוצות
למה כל השיטות O(n²)?
כי בכולן יש לולאה כפולה – לולאה חיצונית שרצה n פעמים ולולאה פנימית שרצה עד n פעמים. סה"כ סדר גודל של n² השוואות.
איזה מיון כדאי להשתמש?
בבגרות – צריך לדעת את שלושתם. בפועל, אם המערך כמעט ממוין – מיון הכנסה הכי מהיר. למערכים גדולים משתמשים במיונים מתקדמים יותר (Merge Sort, Quick Sort).
מה זה מיון יורד?
פשוט הופכים את כיוון ההשוואה: במקום < כותבים > (או להיפך). למשל, במיון בחירה מחפשים מקסימום במקום מינימום.