במאמר זה, נדון באלגוריתם המיון של Radix. מיון Radix הוא אלגוריתם המיון הליניארי המשמש עבור מספרים שלמים. במיון Radix, יש מיון ספרה אחר ספרה שמתחיל מהספרה הפחות משמעותית לספרה המשמעותית ביותר.
תהליך מיון הרדיקס פועל בדומה למיון שמות התלמידים, לפי סדר האלפביתי. במקרה זה, נוצרו 26 רדיקסים עקב 26 האלפביתים באנגלית. במעבר הראשון, שמות התלמידים מקובצים לפי הסדר העולה של האות הראשונה בשמם. לאחר מכן, במעבר השני, שמותיהם מקובצים לפי הסדר העולה של האות השנייה בשמם. והתהליך ממשיך עד שנמצא את הרשימה הממוינת.
איזה אוסף בג'אווה
עכשיו, בואו נראה את האלגוריתם של מיון Radix.
אַלגוֹרִיתְם
radixSort(arr) max = largest element in the given array d = number of digits in the largest element (or, max) Now, create d buckets of size 0 - 9 for i -> 0 to d sort the array elements using counting sort (or any stable sort) according to the digits at the ith place
עבודה של אלגוריתם מיון Radix
כעת, בואו נראה את פעולתו של אלגוריתם המיון של Radix.
השלבים המשמשים במיון של מיון רדיקס מפורטים כדלקמן -
- ראשית, עלינו למצוא את האלמנט הגדול ביותר (נניח מקסימום ) מהמערך הנתון. לְהַנִיחַ 'איקס' להיות מספר הספרות ב מקסימום . ה 'איקס' מחושב כי אנחנו צריכים לעבור דרך המקומות המשמעותיים של כל האלמנטים.
- לאחר מכן, עברו אחד אחד על כל מקום משמעותי. כאן, עלינו להשתמש בכל אלגוריתם מיון יציב כדי למיין את הספרות של כל מקום משמעותי.
עכשיו בואו נראה את העבודה של מיון רדיקס בפירוט באמצעות דוגמה. כדי להבין זאת בצורה ברורה יותר, בואו ניקח מערך לא ממוין וננסה למיין אותו באמצעות מיון radix. זה יהפוך את ההסבר לבהיר יותר וקל יותר.
במערך הנתון, האלמנט הגדול ביותר הוא 736 שיש להם 3 ספרות בו. אז, הלולאה תפעל עד שלוש פעמים (כלומר, ל- מקום של מאות ). כלומר נדרשות שלוש מעברים כדי למיין את המערך.
כעת, מיינו תחילה את האלמנטים על בסיס ספרות מקום יחידה (כלומר, x = 0 ). כאן, אנו משתמשים באלגוריתם מיון הספירה כדי למיין את האלמנטים.
מעבר 1:
במעבר הראשון, הרשימה ממוינת על בסיס הספרות במקום 0.
לאחר המעבר הראשון, רכיבי המערך הם -
מעבר 2:
במעבר זה, הרשימה ממוינת על בסיס הספרות המשמעותיות הבאות (כלומר, ספרות ב-10ה'מקום).
לאחר המעבר השני, רכיבי המערך הם -
מעבר 3:
במעבר זה, הרשימה ממוינת על בסיס הספרות המשמעותיות הבאות (כלומר, ספרות ב-100ה'מקום).
לאחר המעבר השלישי, רכיבי המערך הם -
כעת, המערך ממוין בסדר עולה.
מורכבות מיון רדיקס
כעת, בואו נראה את מורכבות הזמן של מיון Radix במקרה הטוב, במקרה הממוצע והמקרה הגרוע ביותר. נראה גם את מורכבות החלל של מיון Radix.
1. מורכבות זמן
מקרה | מורכבות זמן |
---|---|
המקרה הטוב ביותר | Ω(n+k) |
מקרה ממוצע | θ(נק) |
במקרה הגרוע ביותר | או(נק) |
Radix sort הוא אלגוריתם מיון לא השוואתי טוב יותר מאלגוריתמי המיון ההשוואתי. יש לו מורכבות זמן ליניארית טובה יותר מהאלגוריתמים ההשוואתיים עם המורכבות O(n logn).
2. מורכבות החלל
מורכבות החלל | O(n + k) |
יַצִיב | כן |
- מורכבות החלל של מיון Radix היא O(n + k).
יישום Radix sort
כעת, בואו נראה את התוכניות של Radix ממיינות בשפות תכנות שונות.
בנאי ב-java
תכנית: כתוב תוכנית ליישום Radix sort בשפת C.
#include int getMax(int a[], int n) { int max = a[0]; for(int i = 1; i max) max = a[i]; } return max; //maximum element from the array } void countingSort(int a[], int n, int place) // function to implement counting sort { int output[n + 1]; int count[10] = {0}; // Calculate count of elements for (int i = 0; i <n; i++) count[(a[i] place) % 10]++; calculate cumulative frequency for (int i="1;" <10; count[i] +="count[i" - 1]; place the elements in sorted order 1;>= 0; i--) { output[count[(a[i] / place) % 10] - 1] = a[i]; count[(a[i] / place) % 10]--; } for (int i = 0; i 0; place *= 10) countingSort(a, n, place); } // function to print array elements void printArray(int a[], int n) { for (int i = 0; i <n; ++i) { printf('%d ', a[i]); } printf(' '); int main() a[]="{181," 289, 390, 121, 145, 736, 514, 888, 122}; n="sizeof(a)" sizeof(a[0]); printf('before sorting array elements are - '); printarray(a,n); radixsort(a, n); printf('after applying radix sort, the printarray(a, < pre> <p> <strong>Output:</strong> </p> <p>After the execution of the above code, the output will be -</p> <img src="//techcodeview.com/img/ds-tutorial/06/radix-sort-algorithm-8.webp" alt="Radix Sort Algorithm"> <p> <strong>Program:</strong> Write a program to implement Radix sort in C++.</p> <pre> #include using namespace std; int getMax(int a[], int n) { int max = a[0]; for(int i = 1; i max) max = a[i]; } return max; //maximum element from the array } void countingSort(int a[], int n, int place) // function to implement counting sort { int output[n + 1]; int count[10] = {0}; // Calculate count of elements for (int i = 0; i <n; i++) count[(a[i] place) % 10]++; calculate cumulative frequency for (int i="1;" <10; count[i] +="count[i" - 1]; place the elements in sorted order 1;>= 0; i--) { output[count[(a[i] / place) % 10] - 1] = a[i]; count[(a[i] / place) % 10]--; } for (int i = 0; i 0; place *= 10) countingSort(a, n, place); } // function to print array elements void printArray(int a[], int n) { for (int i = 0; i <n; ++i) cout< <a[i]<<' '; } int main() { a[]="{171," 279, 380, 111, 135, 726, 504, 878, 112}; n="sizeof(a)" sizeof(a[0]); cout<<'before sorting array elements are - '; printarray(a,n); radixsort(a, n); cout<<' after applying radix sort, the printarray(a, return 0; < pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/06/radix-sort-algorithm-9.webp" alt="Radix Sort Algorithm"> <p> <strong>Program:</strong> Write a program to implement Radix sort in C#.</p> <pre> using System; class RadixSort { static int getMax(int[] a, int n) { int max = a[0]; for(int i = 1; i max) max = a[i]; } return max; //maximum element from the array } static void countingSort(int[] a, int n, int place) // function to implement counting sort { int[] output = new int[n+1]; int[] count = new int[10]; // Calculate count of elements for (int i = 0; i <n; i++) count[(a[i] place) % 10]++; calculate cumulative frequency for (int i="1;" <10; count[i] +="count[i" - 1]; place the elements in sorted order 1;>= 0; i--) { output[count[(a[i] / place) % 10] - 1] = a[i]; count[(a[i] / place) % 10]--; } for (int i = 0; i 0; place *= 10) countingSort(a, n, place); } // function to print array elements static void printArray(int[] a, int n) { for (int i = 0; i <n; ++i) console.write(a[i] + ' '); } static void main() { int[] a="{161," 269, 370, 101, 125, 716, 54, 868, 12}; int n="a.Length;" console.write('before sorting array elements are - '); printarray(a,n); radixsort(a, n); console.write(' after applying radix sort, the printarray(a, < pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/06/radix-sort-algorithm-10.webp" alt="Radix Sort Algorithm"> <p> <strong>Program:</strong> Write a program to implement Radix sort in Java.</p> <pre> class RadixSort { int getMax(int a[], int n) { int max = a[0]; for(int i = 1; i max) max = a[i]; } return max; //maximum element from the array } void countingSort(int a[], int n, int place) // function to implement counting sort { int[] output = new int[n+1]; int[] count = new int[10]; // Calculate count of elements for (int i = 0; i <n; i++) count[(a[i] place) % 10]++; calculate cumulative frequency for (int i="1;" <10; count[i] +="count[i" - 1]; place the elements in sorted order 1;>= 0; i--) { output[count[(a[i] / place) % 10] - 1] = a[i]; count[(a[i] / place) % 10]--; } for (int i = 0; i 0; place *= 10) countingSort(a, n, place); } // function to print array elements void printArray(int a[], int n) { for (int i = 0; i <n; ++i) system.out.print(a[i] + ' '); } public static void main(string args[]) { int a[]="{151," 259, 360, 91, 115, 706, 34, 858, 2}; n="a.length;" radixsort r1="new" radixsort(); system.out.print('before sorting array elements are - '); r1.printarray(a,n); r1.radixsort(a, n); system.out.print(' after applying radix sort, the r1.printarray(a, < pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/06/radix-sort-algorithm-11.webp" alt="Radix Sort Algorithm"> <p>So, that's all about the article. Hope the article will be helpful and informative to you.</p> <hr></n;></n;></pre></n;></n;></pre></n;></n;></pre></n;></n;>