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