From 842db3885dcdd62a15b4a2db5b67bedcf19ea438 Mon Sep 17 00:00:00 2001 From: Anieshar1 <114723048+Anieshar1@users.noreply.github.com> Date: Tue, 25 Oct 2022 11:12:25 +0530 Subject: [PATCH] Create CountSort.cpp --- Sorting/Cpp/CountSort.cpp | 63 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 Sorting/Cpp/CountSort.cpp diff --git a/Sorting/Cpp/CountSort.cpp b/Sorting/Cpp/CountSort.cpp new file mode 100644 index 0000000..2914989 --- /dev/null +++ b/Sorting/Cpp/CountSort.cpp @@ -0,0 +1,63 @@ +// C++ Program for counting sort +#include +#include +using namespace std; +#define RANGE 255 + +// The main function that sort +// the given string arr[] in +// alphabetical order +void countSort(char arr[]) +{ + // The output character array + // that will have sorted arr + char output[strlen(arr)]; + + // Create a count array to store count of individual + // characters and initialize count array as 0 + int count[RANGE + 1], i; + memset(count, 0, sizeof(count)); + + // Store count of each character + for (i = 0; arr[i]; ++i) + ++count[arr[i]]; + + // Change count[i] so that count[i] now contains actual + // position of this character in output array + for (i = 1; i <= RANGE; ++i) + count[i] += count[i - 1]; + + // Build the output character array + for (i = 0; arr[i]; ++i) { + output[count[arr[i]] - 1] = arr[i]; + --count[arr[i]]; + } + + /* + For Stable algorithm + for (i = sizeof(arr)-1; i>=0; --i) + { + output[count[arr[i]]-1] = arr[i]; + --count[arr[i]]; + } + + For Logic : See implementation + */ + + // Copy the output array to arr, so that arr now + // contains sorted characters + for (i = 0; arr[i]; ++i) + arr[i] = output[i]; +} + +// Driver code +int main() +{ + char arr[] = "geeksforgeeks"; + + countSort(arr); + + cout << "Sorted character array is " << arr; + return 0; +} +