CS153/hw5/hw4programs/count_sort.oat

60 lines
1.1 KiB
Text
Raw Normal View History

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);
var counts = new int[max - min + 1];
for (var i = 0; i < len; i = i + 1;) {
counts[arr[i] - min] = counts[arr[i] - min] + 1;
}
var i = min;
var j = 0;
var out = new int[len];
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;
}