Изменения

Перейти к: навигация, поиск

Сортировка подсчётом

62 байта добавлено, 10:15, 12 июня 2012
Реализация
==== Реализация ====
В этом варианте помимо входного массива <tex>A</tex> потребуется два вспомогательных массива — <tex>C[0..k - 1]</tex> для счётчика и <tex>B[0..n - 1]</tex> для отсортированного массива. Сначала следует заполнить массив <tex>C</tex> нулями, и для каждого , проходя по массиву <tex>A</tex>, записываем сколько у нас есть чисел равных <tex>A[i]</tex> увеличить в массив <tex>C[A[i]]</tex> на (строки 1- 4). Далее подсчитывается число элементов меньше или равных текущему. Для этого каждый <tex>C[number]</tex>, начиная с <tex>C[1]</tex>, увеличивают на <tex>C[number (строки 5 - 1]</tex>6). На последнем шаге алгоритма читается входной массив с конца и , а в каждый массив <tex>B[C[A[i]]]</tex> записывается <tex>A[i]</tex>записываются элементы на те позиции, а значение где они должны стоять; эта информация хранится в массиве <tex>C[A[i]]</tex> уменьшается на 1(строки 7 - 9). Алгоритм устойчив. Устойчивость может потребоваться при [[Сортировка_подсчетом_сложных_объектов|сортировке сложных структур данных]].
<code>
StableCountingSort
for number = 0 to k - 1 C[number] = 0; for i = 0 to length[A] - 1 C[A[i]] = C[A[i]] + 1; for number = 1 to k - 1 C[j] = C[j] + C[j - 1]; for i = length[A] - 1 to 0 B[C[A[i]]] = A[i]; C[A[i]] = C[A[i]] - 1;
</code>
277
правок

Навигация