From 58fd1fbfc1ff1b2484b768562b5c41ccf1011600 Mon Sep 17 00:00:00 2001 From: Sampada Kathar <58398802+AlacritousCreature@users.noreply.github.com> Date: Tue, 29 Sep 2020 14:09:26 +0530 Subject: [PATCH] Add Radix Sort in C folder --- Data Structures and Algorithms/C/RadixSort.c | 82 ++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 Data Structures and Algorithms/C/RadixSort.c diff --git a/Data Structures and Algorithms/C/RadixSort.c b/Data Structures and Algorithms/C/RadixSort.c new file mode 100644 index 00000000..b5ef6123 --- /dev/null +++ b/Data Structures and Algorithms/C/RadixSort.c @@ -0,0 +1,82 @@ +#include + +int getMax(int arr[], int n); +void countSort(int arr[], int n, int exp); +void radixsort(int arr[], int n); +void print(int arr[], int n); + +int main() +{ + int n; + printf("Enter the no. of integer numbers in the array: "); + scanf("%d", &n); + + printf("Enter the integers: \n"); + int arr[n]; + for (int i = 0; i < n; ++i) + { + int m = 0; + scanf("%d", &m); + arr[i] = m; + } + radixsort(arr, n); + printf("The sorted array is: \n"); + print(arr, n); + return 0; +} + +//function to get maximum value in arr[] +int getMax(int arr[], int n) +{ + int mx = arr[0]; + for (int i = 1; i < n; ++i) + if (arr[i] > mx) + mx = arr[i]; + return mx; +} + +// A function to do counting sort of arr[] according to +// the digit represented by exp. +void countSort(int arr[], int n, int exp) +{ + int output[n]; + int i, count[10] = {0}; + + // Store count of occurrences in count[] + for (i = 0; i < n; ++i) + count[(arr[i] / exp) % 10]++; + + // Change count[i] so that count[i] now contains actual + // position of this digit in output[] + for (i = 1; i < 10; ++i) + count[i] += count[i - 1]; + + // make 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]; +} + +void radixsort(int arr[], int n) +{ + // Find the maximum number to know number of digits + int m = getMax(arr, n); + + // Do counting sort for every digit. Note that instead + // of passing digit number, exp is passed. exp is 10^i + // where i is current digit number + for (int exp = 1; m / exp > 0; exp *= 10) + countSort(arr, n, exp); +} + +// function to print the array +void print(int arr[], int n) +{ + for (int i = 0; i < n; ++i) + printf("%d ", arr[i]); +}