diff --git a/data structures/cpp/Counting Sort.cpp b/data structures/cpp/Counting Sort.cpp new file mode 100644 index 0000000..989bab4 --- /dev/null +++ b/data structures/cpp/Counting Sort.cpp @@ -0,0 +1,57 @@ +#include +#include +using namespace std; + +vector countSort(vector& inputArray) +{ + int N = inputArray.size(); + + // Finding the maximum element of array inputArray[]. + int M = 0; + + for (int i = 0; i < N; i++) + M = max(M, inputArray[i]); + + // Initializing countArray[] with 0 + vector countArray(M + 1, 0); + + // Mapping each element of inputArray[] as an index + // of countArray[] array + + for (int i = 0; i < N; i++) + countArray[inputArray[i]]++; + + // Calculating prefix sum at every index + // of array countArray[] + for (int i = 1; i <= M; i++) + countArray[i] += countArray[i - 1]; + + // Creating outputArray[] from countArray[] array + vector outputArray(N); + + for (int i = N - 1; i >= 0; i--) + + { + outputArray[countArray[inputArray[i]] - 1] = inputArray[i]; + + countArray[inputArray[i]]--; + } + + return outputArray; +} + +// Driver code +int main() +{ + + // Input array + vector inputArray = { 4, 3, 12, 1, 5, 5, 3, 9 }; + + // Output array + vector outputArray = countSort(inputArray); + + for (int i = 0; i < inputArray.size(); i++) + cout << outputArray[i] << " "; + + return 0; +}