#include <iostream>
using namespace std ;
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 min, max;
findMinMax(arr, len, min, max);
int countLen = max - min + 1;
int *count = new int[countLen]();
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];
}
void printArray(int* arr, int len) {
for (int i = 0; i < len; ++i) {
cout << arr[i] << " ";
}
cout << endl;
}
int main() {
int arr0[] = {60, 30, 80, 90, 10, 40};
int orderedArr[10];
printArray(arr0, 6);
lineCountSort(arr0, 6, orderedArr);
printArray(orderedArr, 6);
int arr1[] = {62, 42, 82, 92, 62, 42, 92, 92};
printArray(arr1, 8);
lineCountSort(arr1, 8, orderedArr);
printArray(orderedArr, 8);
int arr2[] = {0};
printArray(arr2, 1);
lineCountSort(arr2, 1, orderedArr);
printArray(orderedArr, 1);
int arr3[] = {};
printArray(arr3, 0);
lineCountSort(arr3, 0, orderedArr);
printArray(orderedArr, 0);
int arr4[] = {10, 9, 8};
printArray(arr4, 3);
lineCountSort(arr4, 3, orderedArr);
printArray(orderedArr, 3);
return 0;
}