#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
void basic_count_sort(int * arr, int size) {
// Find the largest element in our array
int max = *std::max_element(arr, arr+size);
// Make an array of that size, to store frequency of each element
int * count = new int[max+1];
//Initialize array to 0
std::fill(count, count+max+1, 0);
for(int i=0;i<size;++i) {
++count[arr[i]];
}
int currPos = 0;
for(int i=0;i<max+1;++i) {
if(count[i] != 0) {
// Fill array with i, count[i] times
// From array indices pos to pos+count[i]
std::fill(arr + currPos, arr + currPos + count[i], i);
currPos += count[i];
}
}
}
int main() {
int arr[] = {100,100,100,5,3,3,6,5,4,2,4,5,5,4,2,1,1,1,100,1};
int size = 20;
basic_count_sort(arr, size);
for(int i=0;i<size;++i)
std::cout << arr[i] << " ";
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8Y3N0cmluZz4KI2luY2x1ZGUgPGFsZ29yaXRobT4KCnZvaWQgYmFzaWNfY291bnRfc29ydChpbnQgKiBhcnIsIGludCBzaXplKSB7CiAgICAvLyBGaW5kIHRoZSBsYXJnZXN0IGVsZW1lbnQgaW4gb3VyIGFycmF5CiAgICBpbnQgbWF4ID0gKnN0ZDo6bWF4X2VsZW1lbnQoYXJyLCBhcnIrc2l6ZSk7CiAgICAKICAgIC8vIE1ha2UgYW4gYXJyYXkgb2YgdGhhdCBzaXplLCB0byBzdG9yZSBmcmVxdWVuY3kgb2YgZWFjaCBlbGVtZW50CiAgICBpbnQgKiBjb3VudCA9IG5ldyBpbnRbbWF4KzFdOwogICAgCiAgICAvL0luaXRpYWxpemUgYXJyYXkgdG8gMAogICAgc3RkOjpmaWxsKGNvdW50LCBjb3VudCttYXgrMSwgMCk7CiAgICAKICAgIGZvcihpbnQgaT0wO2k8c2l6ZTsrK2kpIHsKICAgICAgICArK2NvdW50W2FycltpXV07CiAgICB9CiAgICAKICAgIGludCBjdXJyUG9zID0gMDsKICAgIGZvcihpbnQgaT0wO2k8bWF4KzE7KytpKSB7CiAgICAgICAgaWYoY291bnRbaV0gIT0gMCkgewogICAgICAgICAgICAvLyBGaWxsIGFycmF5IHdpdGggaSwgY291bnRbaV0gdGltZXMKICAgICAgICAgICAgLy8gRnJvbSBhcnJheSBpbmRpY2VzIHBvcyB0byBwb3MrY291bnRbaV0KICAgICAgICAgICAgc3RkOjpmaWxsKGFyciArIGN1cnJQb3MsIGFyciArIGN1cnJQb3MgKyBjb3VudFtpXSwgaSk7CiAgICAgICAgICAgIGN1cnJQb3MgKz0gY291bnRbaV07CiAgICAgICAgfQogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIGludCBhcnJbXSA9IHsxMDAsMTAwLDEwMCw1LDMsMyw2LDUsNCwyLDQsNSw1LDQsMiwxLDEsMSwxMDAsMX07CiAgICBpbnQgc2l6ZSA9IDIwOwogICAgYmFzaWNfY291bnRfc29ydChhcnIsIHNpemUpOwogICAgZm9yKGludCBpPTA7aTxzaXplOysraSkKICAgICAgICBzdGQ6OmNvdXQgPDwgYXJyW2ldIDw8ICIgIjsKfQo=