diff --git a/C/Radix Sort.c b/C/Radix Sort.c new file mode 100644 index 0000000..26352f9 --- /dev/null +++ b/C/Radix Sort.c @@ -0,0 +1,54 @@ +#include + +int getMax(int arr[], int n) { + int mx = arr[0]; + int i; + for (i = 1; i < n; i++) + if (arr[i] > mx) + mx = arr[i]; + return mx; +} + +void countSort(int arr[], int n, int exp) { + int output[n]; // output array + int i, count[10] = { 0 }; + + // Store count of occurrences in count[] + for (i = 0; i < n; i++) + count[(arr[i] / exp) % 10]++; + + for (i = 1; i < 10; i++) + count[i] += count[i - 1]; + + // Build the output array + for (i = n - 1; i >= 0; i--) { + output[count[(arr[i] / exp) % 10] - 1] = arr[i]; + count[(arr[i] / exp) % 10]--; + } + + for (i = 0; i < n; i++) + arr[i] = output[i]; +} + +// The main function to that sorts arr[] of size n using Radix Sort +void radixsort(int arr[], int n) { + int m = getMax(arr, n); + + int exp; + for (exp = 1; m / exp > 0; exp *= 10) + countSort(arr, n, exp); +} + +void print(int arr[], int n) { + int i; + for (i = 0; i < n; i++) + printf("%d ", arr[i]); +} + +int main() { + int arr[] = { 170, 45, 75, 90, 802, 24, 2, 66 }; + int n = sizeof(arr) / sizeof(arr[0]); + radixsort(arr, n); + print(arr, n); + return 0; +}