From 29d8ab66daefd61d5b81f8dcaf4c4365ae477294 Mon Sep 17 00:00:00 2001 From: Phagun26 <97800707+Phagun26@users.noreply.github.com> Date: Sat, 8 Oct 2022 12:26:24 +0530 Subject: [PATCH] Added CountingSort.cpp This is the code for counting sort in c++ language using static memory allocation --- counting_sort/CountingSort.cpp | 57 ++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 counting_sort/CountingSort.cpp diff --git a/counting_sort/CountingSort.cpp b/counting_sort/CountingSort.cpp new file mode 100644 index 00000000..1308f6d8 --- /dev/null +++ b/counting_sort/CountingSort.cpp @@ -0,0 +1,57 @@ +#include +using namespace std; + +void countSort(int array[], int size) { + // We will provide static allocation to the output array + int output[10]; + int count[10]; + int max = array[0]; + + // Find the largest element of the array + for (int i = 1; i < size; i++) { + if (array[i] > max) + max = array[i]; + } + + // Initialize count array with all zeros. + for (int i = 0; i <= max; ++i) { + count[i] = 0; + } + + // Store the count of each element + for (int i = 0; i < size; i++) { + count[array[i]]++; + } + + // Store the cummulative count of each array + for (int i = 1; i <= max; i++) { + count[i] += count[i - 1]; + } + + // Find the index of each element of the original array in count array, and + // place the elements in output array + for (int i = size - 1; i >= 0; i--) { + output[count[array[i]] - 1] = array[i]; + count[array[i]]--; + } + + // Copy the sorted elements into original array + for (int i = 0; i < size; i++) { + array[i] = output[i]; + } +} + +// Function to print an array +void printArray(int array[], int size) { + for (int i = 0; i < size; i++) + cout << array[i] << " "; + cout << endl; +} + + +int main() { + int array[] = {4, 2, 2, 8, 3, 3, 1}; + int n = sizeof(array) / sizeof(array[0]); + countSort(array, n); + printArray(array, n); +}