Алгоритм, как указано выше, работает в O (n), где n - размер массива a
.
Однако я даже сомневаюсь, что он работает правильно.
Итак, вот псевдокод-реализация подсчета сортировки. Он принимает массив a
целых чисел и сохраняет отсортированные значения в массиве целых чисел b
. a
и b
должны быть одинаковой длины.
void countingSort(int[] a, int[] b){
// first of all: count occurences
int[] occ = new int[a.length];
for (int i = 0; i<a.length; ++i){
occ[i]=0;
}
for (int i = 0; i<a.length; ++i){
occ[a[i]] = occ[a[i]] + 1;
}
// second: put the elements in order into b
int s = 0;
for (int i = 0; i<a.length; ++i){
// how often did element i occur?
for (int j = 0; j<occ[i]; ++j){
b[s] = i;
s = s + 1;
}
}
}
Надеюсь, я не сделал ничего страшного.