Untitled
unknown
plain_text
3 years ago
1.2 kB
56
Indexable
#include <iostream>
#include <climits>
using namespace std;
void printArray(int * arr, int n){
for(int i=0; i<n; i++) cout << arr[i] << ", ";
cout << endl;
}
void countSortHelper(int * arr, int n, int max, int min){
int range = max - min + 1;
int * farr = new int[range];
// 2nd step - find these frequencies
for(int i=0; i<n; i++){
int idx = arr[i] - min;
farr[idx]++;
}
// 3rd step - cummulative sum
for(int i=1; i<range; i++){
farr[i] = farr[i] + farr[i-1];
}
int * ans = new int[n];
for(int i=n-1; i>=0; i--){
int val = arr[i];
int pos = farr[val - min];
int idx = pos - 1;
ans[idx] = val;
farr[val - min]--;
}
for(int i=0; i<n; i++) arr[i] = ans[i];
}
void countSort(int * arr, int n){
// 1st step - finding the range
int maxValue = arr[0], minValue = arr[0];
for(int i=1; i<n; i++){
maxValue = max(maxValue, arr[i]);
minValue = min(minValue, arr[i]);
}
countSortHelper(arr, n, maxValue, minValue);
}
int main() {
// your code goes here
int n;
cin >> n;
int arr[n];
for(int i=0; i<n; i++) cin >> arr[i];
printArray(arr, n);
countSort(arr, n);
printArray(arr, n);
return 0;
}Editor is loading...