From cc5da8777a1abc8b8bfa737ca08c31f288d264a6 Mon Sep 17 00:00:00 2001 From: Tawfik Yasser Date: Sun, 7 Feb 2021 19:43:09 +0200 Subject: [PATCH] Add Radix Sort (#58) * Add radix-sort algorithm * Update README.md * Update radix-sort.cpp Update code to accept all test cases * Update radix-sort.cpp fixing function name Co-authored-by: Arsenic <54987647+Arsenic-ATG@users.noreply.github.com> --- sorting/README.md | 4 +-- sorting/c-or-cpp/radix-sort.cpp | 54 +++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 sorting/c-or-cpp/radix-sort.cpp diff --git a/sorting/README.md b/sorting/README.md index 56c50cdd..0372fce9 100644 --- a/sorting/README.md +++ b/sorting/README.md @@ -10,8 +10,8 @@ 6. [Heap Sort](c-or-cpp/heap-sort.cpp) 7. [Counting Sort](c-or-cpp/counting-sort.cpp) 8. [Bucket Sort](c-or-cpp/bucket-sort.cpp) -9. [Shell Sort](c-or-cpp/shell-sort.cpp) - +9. [Radix Sort](c-or-cpp/radix-sort.cpp) +10. [Shell Sort](c-or-cpp/shell-sort.cpp) ### C# diff --git a/sorting/c-or-cpp/radix-sort.cpp b/sorting/c-or-cpp/radix-sort.cpp new file mode 100644 index 00000000..46784a14 --- /dev/null +++ b/sorting/c-or-cpp/radix-sort.cpp @@ -0,0 +1,54 @@ +//Author: Tawfik Yasser +#include +#include +using namespace std; +int getMax(int array[], int n) { + int max = array[0]; + for (int i = 1; i < n; i++) + if (array[i] > max) + max = array[i]; + return max; +} +void countingSort(int array[], int size, int place) { + const int max = 10; + int output[size]; + int count[max]; + + for (int i = 0; i < max; ++i) + count[i] = 0; + + for (int i = 0; i < size; i++) + count[(array[i] / place) % 10]++; + + for (int i = 1; i < max; i++) + count[i] += count[i - 1]; + + for (int i = size - 1; i >= 0; i--) { + output[count[(array[i] / place) % 10] - 1] = array[i]; + count[(array[i] / place) % 10]--; + } + + for (int i = 0; i < size; i++) + array[i] = output[i]; +} + +void radixSort(int array[], int size) { + int max = getMax(array, size); + for (int place = 1; max / place > 0; place *= 10) + countingSort(array, size, place); +} + +//Print the sorted array +void printSortedArray(int arr[],int n){ + for(int i=0;i