Radix Sort
Radix Sort: The radix sort is a non-comparative integer sorting algorithm that sorts the elements by grouping the individual digits of the same location. It shares the same significant position and value. Positional notation is required in this sorting. An excellent example of the radix sort is a dictionary because, in the dictionary, all the alphabets are arranged in alphabetical order. Radix sort was developed by the Harold H. Seward in 1954.
Complexity table of radix sort
Complexity | Best case | Average case | Worst case |
Time | ?(n + k) | ?(nk) | O(nk) |
Space | O(n + k) |
Algorithm of radix sort
Step 1: Find the largest number in ARR as LARGE Step 2: [INITIALIZE] SET NOP = Number of digits in LARGE Step 3: SET PASS = 0 Step 4: Repeat Step 5 while PASS <= NOP-1 Step 5: SET I = 0 and INITIALIZE buckets Step 6: Repeat Steps 7 to 9 while I<n-1< li=""></n-1<> Step 7: SET DIGIT = digit at (PASS)th place in A[I] Step 8: Add A[I] to the bucket numbered DIGIT Step 9: INCREMENT bucket count for bucket numbered DIGIT // end of loop Step 10: Collect the numbers in the bucket // end of loop Step 11: end
Example 1: Suppose we have the following array, which we have to sort.
542 | 254 | 864 | 650 | 875 | 781 | 453 | 211 | 152 | 968 |
Step 1: Sort the array according to the last digit of the value in the array element. 650 781 211 542 152 453 254 864 875 968 Step 2: Sort the array according to the middle digit of the value in the array element. 211 542 650 152 453 254 864 968 875 781 Step 3: Sort the array according to the first digit of the value in the array element. 152 211 254 453 542 650 781 864 875 968
Example 2: Suppose we have the following array, which we have to sort.
65 | 374 | 3210 | 10 | 6 | 3257 | 697 | 211 | 99 | 18 |
Step 1: 0065 0374 3210 0010 0006 3257 0697 0211 0099 0018 Step 2: Sort the array according to the last digit of the value in the array element. 3210 0010 0211 0374 0065 0006 3257 0697 0018 0099 Step 3: Sort the array according to the second last digit of the value in the array element. 0006 3210 0010 0211 0018 3257 0065 0374 0697 0099 Step 4: Sort the array according to the second digit of the value in the array element. 0006 0010 0018 0065 0099 3210 0211 3257 0374 0697 Step 5: Sort the array according to the first digit of the value in the array element. 0006 0010 0018 0065 0099 0211 0374 0697 3210 3257 6 10 18 65 99 211 374 697 3210 3257
Radix sort program in C language:
#include <stdio.h> int largest(int a[]); void radix_sort(int a[]); void main() { int i; int a[10]={21, 14, 65, 785, 365, 652, 75, 35, 3214, 52}; radix_sort(a); printf("\n Radix sorted is: \n"); for(i=0;i<10;i++) printf(" %d\t", a[i]); } int largest(int a[]) { int larger=a[0], i; for(i=1;i<10;i++) { if(a[i]>larger) larger = a[i]; } return larger; } void radix_sort(int a[]) { int bucket[10][10], bucket_count[10]; int i, j, k, remainder, NOP=0, divisor=1, larger, pass; larger = largest(a); while(larger>0) { NOP++; larger/=10; } for(pass=0;pass<NOP;pass++) // Initialize the buckets { for(i=0;i<10;i++) bucket_count[i]=0; for(i=0;i<10;i++) { // sort the numbers according to the digit at passth place remainder = (a[i]/divisor)%10; bucket[remainder][bucket_count[remainder]] = a[i]; bucket_count[remainder] += 1; } // collect the numbers after PASS pass i=0; for(k=0;k<10;k++) { for(j=0;j<bucket_count[k];j++) { a[i] = bucket[k][j]; i++; } } divisor *= 10; } }
Output:
Radix sort is: 14 21 35 52 65 75 365 652 785 3214