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

```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.

```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.

```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 main()
{
int i;
int a={21, 14, 65, 785, 365, 652, 75, 35, 3214, 52};
for(i=0;i<10;i++)
printf(" %d\t", a[i]);
}
int largest(int a[])
{
int larger=a, i;
for(i=1;i<10;i++)
{
if(a[i]>larger)
larger = a[i];
}
return larger;
}
{
int bucket, bucket_count;
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```