#include <stdio.h>
#include <stdlib.h>
void countingSort(int *array, int size);
void printArray(int *array, int size);
int findMax(int *array, int size);
int main(void) {
int set[] = {41, 2, 17, 37, 22, 104, 86, 92, 11, 58, 34};
int size = sizeof(set)/sizeof(set[0]);
printf("Array before sorting: \n"); printArray(set, size);
countingSort(set, size);
printf("\nArray after sorting: \n"); printArray(set, size);
return 0;
}
void printArray(int *array, int size){
for(int i = 0; i < size; i++){
}
}
void countingSort(int *array, int size){
int range = findMax(array, size) + 1;
int count[range];
int output[size];
int i;
for(i = 0; i < range; i++){
count[i] = 0;
}
for(i = 0; i < size; i++){
++count[array[i]];
}
for(i = 1; i < range; i++){
count[i] += count[i - 1];
}
for(i = size - 1; i >= 0; i--){
output[count[array[i]] - 1] = array[i];
--count[array[i]];
}
for(i = 0; i < size; i++){
array[i] = output[i];
}
}
int findMax(int *array, int size){
int max = 0;
for(int i = 0; i < size; i++){
if(array[i] > max)
max = array[i];
}
return max;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnZvaWQgY291bnRpbmdTb3J0KGludCAqYXJyYXksIGludCBzaXplKTsKdm9pZCBwcmludEFycmF5KGludCAqYXJyYXksIGludCBzaXplKTsKaW50IGZpbmRNYXgoaW50ICphcnJheSwgaW50IHNpemUpOwoKaW50IG1haW4odm9pZCkgewoJaW50IHNldFtdID0gezQxLCAyLCAxNywgMzcsIDIyLCAxMDQsIDg2LCA5MiwgMTEsIDU4LCAzNH07CglpbnQgc2l6ZSA9IHNpemVvZihzZXQpL3NpemVvZihzZXRbMF0pOwoJCglwcmludGYoIkFycmF5IGJlZm9yZSBzb3J0aW5nOiBcbiIpOwoJcHJpbnRBcnJheShzZXQsIHNpemUpOwoJCgljb3VudGluZ1NvcnQoc2V0LCBzaXplKTsKCQoJcHJpbnRmKCJcbkFycmF5IGFmdGVyIHNvcnRpbmc6IFxuIik7CglwcmludEFycmF5KHNldCwgc2l6ZSk7CgkKCXJldHVybiAwOwp9Cgp2b2lkIHByaW50QXJyYXkoaW50ICphcnJheSwgaW50IHNpemUpewoJZm9yKGludCBpID0gMDsgaSA8IHNpemU7IGkrKyl7CgkJcHJpbnRmKCIlZCAiLCBhcnJheVtpXSk7Cgl9CglwcmludGYoIlxuIik7Cn0KCnZvaWQgY291bnRpbmdTb3J0KGludCAqYXJyYXksIGludCBzaXplKXsKCWludCByYW5nZSA9IGZpbmRNYXgoYXJyYXksIHNpemUpICsgMTsKCWludCBjb3VudFtyYW5nZV07CglpbnQgb3V0cHV0W3NpemVdOwoJaW50IGk7Cglmb3IoaSA9IDA7IGkgPCByYW5nZTsgaSsrKXsKCQljb3VudFtpXSA9IDA7Cgl9CgkKCWZvcihpID0gMDsgaSA8IHNpemU7IGkrKyl7CgkJKytjb3VudFthcnJheVtpXV07Cgl9CgkKCWZvcihpID0gMTsgaSA8IHJhbmdlOyBpKyspewoJCWNvdW50W2ldICs9IGNvdW50W2kgLSAxXTsKCX0KCQoJZm9yKGkgPSBzaXplIC0gMTsgaSA+PSAwOyBpLS0pewoJCW91dHB1dFtjb3VudFthcnJheVtpXV0gLSAxXSA9IGFycmF5W2ldOwoJCS0tY291bnRbYXJyYXlbaV1dOwoJfQoJCglmb3IoaSA9IDA7IGkgPCBzaXplOyBpKyspewoJCWFycmF5W2ldID0gb3V0cHV0W2ldOwoJfQp9CgppbnQgZmluZE1heChpbnQgKmFycmF5LCBpbnQgc2l6ZSl7CglpbnQgbWF4ID0gMDsKCWZvcihpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspewoJCWlmKGFycmF5W2ldID4gbWF4KQoJCQltYXggPSBhcnJheVtpXTsKCX0KCXJldHVybiBtYXg7Cn0K