Radix Sort
Radix sort is a linear sorting algorithm that is also called bucket sort. It uses the concept of sorting names in alphabetical orders.
The Quick Sort, Merge Sort, Heap Sort and Selection Sort are comparison based algorithms. But the radix sort is not comparison based algorithm. It is linear sorting and best than comparison sorting.
Complexity of Radix Sort
Suppose n is the number of element in an array.
Best Case Time Complexity - O(n)
Radix Sort Example
Suppose the input array is -
12, 72, 28, 69, 34, 101, 134
As per radix sort algorithm, first sort the array according to the one's digit.
12, 72, 28, 69, 34, 101, 134
0:
1: 101
2: 12, 72
3:
4: 34, 134
5:
6:
7:
8: 28
9: 69
So, the array becomes -
101, 12, 72, 34, 134, 28, 69
Again sort the array according to the ten's digit.
101, 12, 72, 34, 134, 28, 69
0: 101
1: 12
2: 28
3: 34, 134
4:
5:
6: 69
7: 72
8:
9:
So, the array becomes -
101, 12, 28, 34, 134, 69, 72
Again sort the array according to the hundred's digit.
101, 12, 28, 34, 134, 69, 72
0:
1: 101, 134
2:
4:
5:
6:
7:
8:
9:
So, the array becomes -
12, 28, 34, 69, 72, 101, 134
Radix Sort Program in C
#include<stdio.h>
int main()
{
int i, n, a[10];
printf("Enter the number of elements: ");
scanf("%d",&n);
printf("Enter %d numbers : \n",n);
for(i = 0; i < n; i++)
{
scanf("%d",&a[i]);
}
radix_sort(a,n);
printf("\n Sorted numbers using Radix Sort : \n");
for(i = 0; i < n; i++)
printf(" %d",a[i]);
printf("\n");
return 0;
}
int getMax(int a[], int n)
{
int max_value = a[0], i;
for(i = 1; i < n; i++)
{
if(max_value < a[i])
max_value = a[i];
}
return max_value;
}
// radix sort
void radix_sort(int a[], int n)
{
int bucket[10][10], bucket_count[10];
int i, j, k, remainder, NOP=0, divisor=1, large, pass;
large = getMax(a, n);
printf("\n Largest element : %d\n",large);
while(large > 0)
{
NOP++;
large/=10;
}
for(pass = 0; pass < NOP; pass++)
{
for(i = 0; i < 10; i++)
{
bucket_count[i] = 0;
}
for(i = 0; i < n; i++)
{
remainder = (a[i] / divisor) % 10;
bucket[remainder][bucket_count[remainder]] = a[i];
bucket_count[remainder] += 1;
}
i = 0;
for(k = 0; k < 10; k++)
{
for(j = 0; j < bucket_count[k]; j++)
{
a[i] = bucket[k][j];
i++;
}
}
divisor *= 10;
printf("\n PASS %d :\n",pass+1);
for(i = 0; i < n; i++)
printf(" %d",a[i]);
printf("\n");
}
}
Output of the above program :
Enter the number of elements: 10
Enter 10 numbers :
09
23
15
52
142
163
12
15
62
72
Largest element : 163
PASS 1 :
52 142 12 62 72 23 163 15 15 9
PASS 2 :
9 12 15 15 23 142 52 62 163 72
PASS 3 :
9 12 15 15 23 52 62 72 142 163
Sorted numbers using Radix Sort :
9 12 15 15 23 52 62 72 142 163