# Radix Sort

Radix sort is a non-comparative sorting algorithm. This sorting algorithm works on the integer keys by grouping digits which share the same position and value. The radix is the base of a number system. As we know that in the decimal system the radix or base is 10. So for sorting some decimal numbers, we need 10 positional boxes to store numbers.

## The complexity of Radix Sort Technique

• Time Complexity: O(nk)
• Space Complexity: O(n+k)

## Input and Output

Input:
The unsorted list: 802 630 20 745 52 300 612 932 78 187
Output:
Data before Sorting: 802 630 20 745 52 300 612 932 78 187
Data after Sorting: 20 52 78 187 300 612 630 745 802 932

## Algorithm

radixSort(array, size, maxDigit)

Input − An array of data, and the total number in the array, digit count of max number

Output − Sorted array.

Begin
define 10 lists as pocket
for i := 0 to max -1 do
m = 10^i+1
p := 10^i
for j := 0 to n-1 do
temp := array[j] mod m
index := temp / p
pocket[index].append(array[j])
done

count := 0
for j := 0 to radix do
while pocket[j] is not empty
array[count] := get first node of pocket[j] and delete it
count := count +1
done
done
End

## Example

#include<iostream>
#include<list>
#include<cmath>
using namespace std;

void display(int *array, int size) {
for(int i = 0; i<size; i++)
cout << array[i] << " ";
cout << endl;
}

void radixSort(int *arr, int n, int max) {
int i, j, m, p = 1, index, temp, count = 0;
list<int> pocket[10]; //radix of decimal number is 10

for(i = 0; i< max; i++) {
m = pow(10, i+1);
p = pow(10, i);

for(j = 0; j<n; j++) {
temp = arr[j]%m;
index = temp/p;   //find index for pocket array
pocket[index].push_back(arr[j]);
}

count = 0;
for(j = 0; j<10; j++) {
//delete from linked lists and store to array
while(!pocket[j].empty()) {
arr[count] = *(pocket[j].begin());
pocket[j].erase(pocket[j].begin());
count++;
}
}
}
}

int main() {
int n, max;
cout << "Enter the number of elements: ";
cin >> n;
cout << "Enter the maximum digit of elements: ";
cin >> max;
int arr[n]; //create an array with given number of elements
cout << "Enter elements:" << endl;

for(int i = 0; i<n; i++) {
cin >> arr[i];
}

cout << "Data before Sorting: ";
display(arr, n);
radixSort(arr, n, max);
cout << "Data after Sorting: ";
display(arr, n);
}

## Output

Enter the number of elements: 10
Enter the maximum digit of elements: 3
Enter elements:
802 630 20 745 52 300 612 932 78 187
Data before Sorting: 802 630 20 745 52 300 612 932 78 187
Data after Sorting: 20 52 78 187 300 612 630 745 802 932
Sharon Christine

An investment in knowledge pays the best interest

Advertisements