במאמר זה, נדון באלגוריתם מיון הדלי. פריטי הנתונים במיון הדלי מופצים בצורה של דליים. בקידוד או ראיונות טכניים למהנדסי תוכנה, אלגוריתמי מיון נשאלים רבות. לכן, חשוב לדון בנושא.
מיון דלי הוא אלגוריתם מיון המפריד את האלמנטים למספר קבוצות שנאמר שהם דליים. אלמנטים במיון דלי מחולקים תחילה באופן אחיד לקבוצות הנקראות דליים, ולאחר מכן הם ממוינים לפי כל אלגוריתם מיון אחר. לאחר מכן, מרכיבים נאספים בצורה ממוינת.
ההליך הבסיסי של ביצוע מיון הדלי ניתן כדלקמן -
- ראשית, חלק את הטווח למספר קבוע של דליים.
- לאחר מכן, לזרוק כל אלמנט לתוך הדלי המתאים לו.
- לאחר מכן, מיין כל דלי בנפרד על ידי יישום אלגוריתם מיון.
- ולבסוף, שרשרת את כל הדליים הממוינים.
היתרונות של מיון דלי הם -
- מיון דלי מפחית את המספר. של השוואות.
- זה מהיר באופן אסימפטוטי בגלל התפלגות אחידה של יסודות.
המגבלות של מיון הדלי הן -
- זה עשוי להיות אלגוריתם מיון יציב או לא.
- זה לא שימושי אם יש לנו מערך גדול כי זה מייקר את העלות.
- זה לא אלגוריתם מיון במקום, מכיוון שנדרש שטח נוסף כדי למיין את הדליים.
המורכבות הטובה והממוצעת של מיון דלי היא O(n + k) , והמורכבות במקרה הגרוע ביותר של מיון דלי היא עַל2) , איפה נ הוא מספר הפריטים.
מיון דלי נפוץ -
- עם ערכי נקודה צפה.
- כאשר הקלט מתחלק באופן אחיד על פני טווח.
הרעיון הבסיסי לבצע את מיון הדלי ניתן כדלקמן -
bucketSort(a[], n) 1. Create 'n' empty buckets 2. Do for each array element a[i] 2.1. Put array elements into buckets, i.e. insert a[i] into bucket[n*a[i]] 3. Sort the elements of individual buckets by using the insertion sort. 4. At last, gather or concatenate the sorted buckets. End bucketSort
עכשיו, בואו נראה את האלגוריתם של מיון דלי.
אַלגוֹרִיתְם
Bucket Sort(A[]) 1. Let B[0....n-1] be a new array 2. n=length[A] 3. for i=0 to n-1 4. make B[i] an empty list 5. for i=1 to n 6. do insert A[i] into list B[n a[i]] 7. for i=0 to n-1 8. do sort list B[i] with insertion-sort 9. Concatenate lists B[0], B[1],........, B[n-1] together in order End
גישת פיזור-איסוף
אנו יכולים להבין את אלגוריתם מיון הדלי באמצעות גישת פיזור-איסוף. כאן, האלמנטים הנתונים מפוזרים תחילה לתוך דליים. לאחר הפיזור, אלמנטים בכל דלי ממוינים באמצעות אלגוריתם מיון יציב. לבסוף, האלמנטים הממוינים יאספו לפי הסדר.
בואו ניקח מערך לא ממוין כדי להבין את תהליך מיון הדלי. יהיה קל יותר להבין את מיון הדלי באמצעות דוגמה.
תן לרכיבי המערך להיות -
כעת, צור דליים בטווח שבין 0 ל-25. טווח הדליים הוא 0-5, 5-10, 10-15, 15-20, 20-25. אלמנטים מוכנסים לדליים בהתאם לטווח הדליים. נניח שהערך של פריט הוא 16, אז הוא יוכנס לדלי בטווח 15-20. באופן דומה, כל פריט במערך יוכנס בהתאם.
שלב זה ידוע כ- פיזור של רכיבי מערך .
עַכשָׁיו, סוג כל דלי בנפרד. ניתן למיין את הרכיבים של כל דלי באמצעות כל אחד מאלגוריתמי המיון היציבים.
לבסוף, לאסוף האלמנטים הממוינים מכל דלי לפי הסדר
כעת, המערך ממוין לחלוטין.
מורכבות מיון דלי
כעת, בואו נראה את מורכבות הזמן של מיון דלי במקרה הטוב, במקרה הממוצע, ובמקרה הגרוע ביותר. נראה גם את מורכבות החלל של מיון הדלי.
1. מורכבות זמן
מקרה | זְמַן | מוּרכָּבוּת |
---|---|---|
המקרה הטוב ביותר | O(n + k) | |
מקרה ממוצע | O(n + k) | |
במקרה הגרוע ביותר | עַל2) |
אם נשתמש במיון ההכנסה כדי למיין את רכיבי הדלי, המורכבות הכוללת תהיה ליניארית, כלומר, O(n + k), כאשר O(n) הוא לייצור הדליים, ו-O(k) הוא עבור מיון רכיבי הדלי. שימוש באלגוריתמים עם מורכבות זמן ליניארית במקרה הטוב.
מורכבות הזמן הטובה ביותר של מיון דלי היא O(n + k) .
המורכבות תלך ותחמיר כאשר האלמנטים יהיו בסדר הפוך.
מורכבות הזמן במקרה הגרוע ביותר של מיון דלי היא עַל2) .
2. מורכבות החלל
מורכבות החלל | O(n*k) |
יַצִיב | כן |
- מורכבות החלל של מיון דלי היא O(n*k).
יישום מיון דלי
כעת, בואו נראה את התוכניות של מיון דלי בשפות תכנות שונות.
תכנית: כתוב תוכנית ליישום מיון דלי בשפת C.
#include int getMax(int a[], int n) // function to get maximum element from the given array { int max = a[0]; for (int i = 1; i max) max = a[i]; return max; } void bucket(int a[], int n) // function to implement bucket sort { int max = getMax(a, n); //max is the maximum element of array int bucket[max], i; for (int i = 0; i <= max; i++) { bucket[i]="0;" } for (int i="0;" < n; bucket[a[i]]++; j="0;" 0) a[j++]="i;" bucket[i]--; void printarr(int a[], int n) function to print array elements ++i) printf('%d ', a[i]); main() a[]="{54," 12, 84, 57, 69, 41, 9, 5}; n="sizeof(a)" sizeof(a[0]); is the size of printf('before sorting are - '); printarr(a, n); bucket(a, printf(' after pre> <p> <strong>Output</strong> </p> <p>After the execution of above code, the output will be -</p> <img src="//techcodeview.com/img/ds-tutorial/04/bucket-sort-algorithm-5.webp" alt="bucket sort"> <p> <strong>Program:</strong> Write a program to implement bucket sort in C++.</p> <pre> #include using namespace std; int getMax(int a[], int n) // function to get maximum element from the given array { int max = a[0]; for (int i = 1; i max) max = a[i]; return max; } void bucket(int a[], int n) // function to implement bucket sort { int max = getMax(a, n); //max is the maximum element of array int bucket[max], i; for (int i = 0; i <= max; i++) { bucket[i]="0;" } for (int i="0;" < n; bucket[a[i]]++; j="0;" 0) a[j++]="i;" bucket[i]--; void printarr(int a[], int n) function to print array elements ++i) cout< <a[i]<<' '; main() a[]="{34," 42, 74, 57, 99, 84, 9, 5}; n="sizeof(a)" sizeof(a[0]); is the size of cout<<'before sorting are - '; printarr(a, n); bucket(a, cout<<' after pre> <p> <strong>Output</strong> </p> <p>After the execution of above code, the output will be -</p> <img src="//techcodeview.com/img/ds-tutorial/04/bucket-sort-algorithm-6.webp" alt="bucket sort"> <p> <strong>Program:</strong> Write a program to implement bucket sort in C#.</p> <pre> using System; class Bucket { static int getMax(int[] a) // function to get maximum element from the given array { int n = a.Length; int max = a[0]; for (int i = 1; i max) max = a[i]; return max; } static void bucket(int[] a) // function to implement bucket sort { int n = a.Length; int max = getMax(a); //max is the maximum element of array int[] bucket = new int[max+1]; for (int i = 0; i <= 10 max; i++) { bucket[i]="0;" } for (int i="0;" < n; bucket[a[i]]++; j="0;" 0) a[j++]="i;" bucket[i]--; static void printarr(int[] a) * function to print the array int i; n="a.Length;" (i="0;" console.write(a[i] + ' '); main() int[] a="{" 95, 50, 45, 15, 20, }; console.write('before sorting elements are - '); printarr(a); bucket(a); console.write(' after pre> <p> <strong>Output</strong> </p> <p>After the execution of above code, the output will be -</p> <img src="//techcodeview.com/img/ds-tutorial/04/bucket-sort-algorithm-7.webp" alt="bucket sort"> <p> <strong>Program:</strong> Write a program to implement bucket sort in Java.</p> <pre> public class Bucket { int getMax(int a[]) // function to get maximum element from the given array { int n = a.length; int max = a[0]; for (int i = 1; i max) max = a[i]; return max; } void bucket(int a[]) // function to implement bucket sort { int n = a.length; int max = getMax(a); //max is the maximum element of array int bucket[] = new int[max+1]; for (int i = 0; i <= 9 max; i++) { bucket[i]="0;" } for (int i="0;" < n; bucket[a[i]]++; j="0;" 0) a[j++]="i;" bucket[i]--; void printarr(int a[]) * function to print the array int i; n="a.length;" (i="0;" system.out.print(a[i] + ' '); public static main(string[] args) a[]="{" 90, 40, 5, 15, 30, }; bucket b1="new" bucket(); system.out.print('before sorting elements are - '); b1.printarr(a); b1.bucket(a); system.out.print(' after pre> <p> <strong>Output</strong> </p> <p>After the execution of above code, the output will be -</p> <img src="//techcodeview.com/img/ds-tutorial/04/bucket-sort-algorithm-8.webp" alt="bucket sort"> <p>So, that's all about the article. Hope the article will be helpful and informative to you.</p> <p>This article was not only limited to the algorithm. Along with the algorithm, we have also discussed the bucket sort complexity, working, and implementation in different programming languages.</p> <hr></=></pre></=></pre></=></pre></=>=>=>=>