2025-01-24 18:59:28 -08:00
|
|
|
|
|
|
|
|
int min(int[] arr, int len) {
|
|
|
|
|
var min = arr[0];
|
|
|
|
|
for (var i = 0; i < len; i = i + 1;) {
|
|
|
|
|
if (arr[i] < min) {
|
|
|
|
|
min = arr[i];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return min;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int max(int[] arr, int len) {
|
|
|
|
|
var max = arr[0];
|
|
|
|
|
for (var i = 0; i < len; i = i + 1;) {
|
|
|
|
|
if (arr[i] > max) {
|
|
|
|
|
max = arr[i];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return max;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int[] count_sort(int[] arr, int len) {
|
|
|
|
|
var min = min(arr, len);
|
|
|
|
|
var max = max(arr, len);
|
|
|
|
|
|
2025-01-24 21:10:31 -08:00
|
|
|
var counts = new int[max - min + 1];
|
2025-01-24 18:59:28 -08:00
|
|
|
|
|
|
|
|
for (var i = 0; i < len; i = i + 1;) {
|
|
|
|
|
counts[arr[i] - min] = counts[arr[i] - min] + 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var i = min;
|
|
|
|
|
var j = 0;
|
|
|
|
|
|
2025-01-24 21:10:31 -08:00
|
|
|
var out = new int[len];
|
2025-01-24 18:59:28 -08:00
|
|
|
|
|
|
|
|
while (i <= max) {
|
|
|
|
|
|
|
|
|
|
if (counts[i - min] > 0) {
|
|
|
|
|
out[j] = i;
|
|
|
|
|
counts[i - min] = counts[i - min] - 1;
|
|
|
|
|
j = j + 1;
|
|
|
|
|
} else {
|
|
|
|
|
i = i + 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return out;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int program(int argc, string[] argv) {
|
|
|
|
|
var arr = new int[]{65, 70, 72, 90, 65, 65, 69, 89, 67};
|
|
|
|
|
var len = 9;
|
|
|
|
|
|
|
|
|
|
print_string(string_of_array(arr));
|
|
|
|
|
print_string("\n");
|
|
|
|
|
var sorted = count_sort(arr, len);
|
|
|
|
|
print_string(string_of_array(sorted));
|
|
|
|
|
return 0;
|
|
|
|
|
}
|