Menu
Coddy logo textTech

Selection Sort (מיון בחירה)

עודכן לאחרונה

מיון בחירה מחלק את המערך לאזור ממוין משמאל ולאזור לא ממוין מימין. בכל מעבר הוא סורק את האזור הלא ממוין כדי למצוא את האיבר הקטן ביותר, ואז מחליף אותו למקום הלא ממוין הראשון, וכך האזור הממוין גדל באחד. לחצו על הפעלה למעלה כדי לראות את הסריקה וההחלפה, או עברו עליהן השוואה אחת בכל פעם.

מיון בחירה תמיד מבצע אותו מספר השוואות בלי קשר לקלט, אבל הוא מבצע לכל היותר n-1 החלפות, הרבה פחות ממיון בועות, וזה יכול להיות חשוב כשכתיבות יקרות.

סיבוכיות זמן וזיכרון

מקרהסיבוכיותהערות
המקרה הטובO(n²)ההשוואות מתבצעות גם אם המערך ממוין
המקרה הממוצעO(n²)סדר אקראי
המקרה הגרועO(n²)ממוין בסדר הפוך
זיכרוןO(1)במקום
יציבלאהחלפות יכולות לשנות את הסדר של איברים שווים

צעד אחר צעד

צעדמה קורה
1מתייחסים למערך כולו כלא ממוין.
2סורקים את האזור הלא ממוין כדי למצוא את האיבר המינימלי.
3מחליפים את המינימום הזה למקום הלא ממוין הראשון.
4מזיזים את הגבול צעד אחד ימינה (התא הזה ממוין עכשיו).
5חוזרים על כך עד שנשאר רק איבר לא ממוין אחד.

דוגמה מפורטת

מיון של [5, 2, 4, 1]:

מעברמערךפעולה
התחלה[5, 2, 4, 1]המערך כולו לא ממוין.
1[1, 2, 4, 5]סורקים את [5, 2, 4, 1], המינימום הוא 1 באינדקס 3; מחליפים אותו עם אינדקס 0.
2[1, 2, 4, 5]סורקים את [2, 4, 5], המינימום הוא 2 שכבר באינדקס 1; מחליפים אותו עם עצמו.
3[1, 2, 4, 5]סורקים את [4, 5], המינימום הוא 4 שכבר באינדקס 2; אין צורך בהזזה.
סיום[1, 2, 4, 5]נשאר רק 5, ולכן הוא כבר במקומו.

מתי להשתמש במיון בחירה

השתמשו בו כאשרהימנעו ממנו כאשר
כתיבות יקרות: הוא מבצע לכל היותר n-1 החלפות.המערך גדול: ההשוואות של O(n²) שולטות.
אתם צריכים מיון במקום פשוט וקל למימוש.אתם צריכים מיון יציב ששומר על הסדר של מפתחות שווים.
הזיכרון מוגבל: הוא משתמש ב-O(1) זיכרון נוסף בלבד.הנתונים כמעט ממוינים: הוא לא יכול לסיים מוקדם כמו מיון הכנסה.
כמות הנתונים זעירה וביצועים צפויים חשובים.התפוקה חשובה: מיונים של O(n log n) כמו quicksort מהירים בהרבה.

קוד Selection Sort

מימוש נקי של Selection Sort שאפשר להריץ, ב-Python, JavaScript, Java, C++, C, Pseudocode. בחרו שפה, העתיקו את הקוד, או פתחו אותו טעון מראש בעורך האונליין של Coddy.

קוד Selection Sort ב-Python

Python
1def selection_sort(a):2    n = len(a)3    for i in range(n - 1):4        # Find the smallest element in the unsorted tail5        min_idx = i6        for j in range(i + 1, n):7            if a[j] < a[min_idx]:8                min_idx = j9        a[i], a[min_idx] = a[min_idx], a[i]10    return a11
12
13nums = [64, 25, 12, 22, 11]14print("Before:", nums)15selection_sort(nums)16print("After: ", nums)
להריץ את הקוד הזה בעורך ה-Python אונליין

שאלות נפוצות על מיון בחירה

מהי סיבוכיות הזמן של מיון בחירה?
מיון בחירה הוא O(n²) בכל המקרים, הטוב, הממוצע והגרוע, כי הוא תמיד סורק את כל האזור הלא ממוין כדי למצוא כל מינימום. הוא משתמש ב-O(1) זיכרון נוסף.
האם מיון בחירה יציב?
הגרסה הסטנדרטית במקום לא יציבה, כי החלפה של מינימום רחוק למקומו יכולה להעביר איבר שווה אל מעבר לאחר. קיימת גרסה יציבה, אבל היא דורשת הזזה במקום החלפה.
מתי מיון בחירה שימושי?
הוא שימושי כשעלות הכתיבה לזיכרון גבוהה, כי הוא מבצע לכל היותר n-1 החלפות, המינימום האפשרי עבור מיון מבוסס השוואה שמזיז איברים.
מה ההבדל בין מיון בחירה למיון בועות?
שניהם מיונים מבוססי השוואה של O(n²), אבל מיון בחירה מבצע לכל היותר n-1 החלפות, ואילו מיון בועות יכול לבצע עד O(n²) החלפות. מיון בועות יכול גם לזהות מערך שכבר ממוין ולעצור מוקדם, ואילו מיון בחירה תמיד מריץ את מספר המעברים המלא.
האם להשתמש במיון בחירה או במיון הכנסה?
העדיפו מיון הכנסה ברוב המקרים: הוא יציב, רץ ב-O(n) על נתונים כמעט ממוינים, ומהיר יותר בממוצע. בחרו במיון בחירה רק כשצמצום מספר הכתיבות הוא העדיפות, כי הוא מבטיח לכל היותר n-1 החלפות.
למה מיון בחירה תמיד רץ ב-O(n²), גם על מערך ממוין?
למיון בחירה אין דרך לדעת שאיבר הוא כבר המינימום בלי לסרוק את שאר האזור הלא ממוין, ולכן הוא מבצע כל השוואה בכל מעבר בלי קשר לסדר הקלט. המשמעות היא שהמקרה הטוב שווה למקרה הגרוע, O(n²), בניגוד למיון הכנסה או למיון בועות, שיכולים לקצר את הדרך.
איור של שפות התכנות ב-Coddy

לשלוט באלגוריתמים עם Coddy

להתחיל