#include <stdio.h>
#include <stdlib.h>
void printArray(int arr[], int len) {
for(int i = 0; i < len; i++) {
printf("%4d",arr[i]);
}
printf("\n");
}
void findMinMax(int arr[], int len, int *min, int *max) {
*min = arr[0];
*max = arr[0];
for (int i = 1; i < len; ++i) {
if (arr[i] < *min) {
*min = arr[i];
}
else if (arr[i] > *max) {
*max = arr[i];
}
}
}
void lineCountSort (int arr[], int len, int orderedArr[]) {
int max, min;
findMinMax(arr, len, &min, &max);
int countLen = max - min + 1;
int *count = (int*)malloc(sizeof(int)*(countLen));
for (int i = 0; i < len; i++) {
count[i] = 0;
}
for (int i = 0; i < len; i++) {
++count[arr[i] - min];
}
for (int i = 1; i < countLen; i++) {
count[i] = count[i] + count[i-1];
}
for (int i = len -1; i >=0; i--) {
orderedArr[--count[arr[i] - min]] = arr[i];
}
}
int main () {
int arr1[] = {2,5,3,0,2,3,0,3};
int orderedArr1[8];
printArray(arr1,8);
lineCountSort(arr1, 8, orderedArr1);
printArray(orderedArr1,8);
return 0;
}