Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции - Структуры и алгоритмы компьютерной обработки данных / 7.Сортировка подсчетом. Цифровая сортировка. Порядковые статистики. Внешняя сортировка

.doc
Скачиваний:
76
Добавлен:
06.02.2015
Размер:
31.23 Кб
Скачать

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

Если ключ сортировки принимает целые значения в интервале 1 … K, и K достаточно мало (чтобы в память помещался вспомогательный массив длины K), то можно использовать устойчивый алгоритм сортировки подсчетом, имеющий сложность Ө(n).

Идея алгоритма - подсчитать для каждого элемента x, сколько элементов выходной последовательности меньше x, после чего записать x в выходной массив на нужное место.

Процедура сортировки подсчетом

А[1..N]-исходный массив, B[1..N]- выходной, С[1..K] -вспомогательный.

procedure CountSort;

Var I: integer;

Begin

For I:=1 to k do C[I]:=0;

For I:=1 to length(A) do Inc(C[A[I].key]);

{C[I] - количество элементов с ключом I}

For I:=2 to k do C[I]:=C[I]+C[I-1];

{C[I] - количество элементов с ключом <=I}

for I:=length(A) downto 1 do

begin

B[C[A[I].key]]:=A[I];

Dec(C[A[I].key]);

End;

End;

Цифровая сортировка

Используется, например, при сортировке дат – сначала по дням, потом - по месяцам, затем – по годам.

Предположим, что элементы последовательности состоят из d цифр.

Тогда можно отсортировать массив устойчивым алгоритмом сначала по 1 цифре, потом по второй и т.д. Сложность будет Ө(dn).

Порядковые статистики

Дано множество из n чисел. Найти элемент, который будет i-м по счету, если расположить элементы множества в порядке возрастания. Такой элемент называется i-й порядковой статистикой.

Примеры: минимум – порядковая статистика номер 1,

максимум – порядковая статистика номер n,

медиана - порядковая статистика номер (n+1)/2.

Поиск порядковой статистики за Ө (n) в среднем

Алгоритм аналогичен алгоритму быстрой сортировки. Разница – после разбиения массива обрабатывается только одна из частей (содержащая искомый элемент).

function select (var A:DataSet;p,r,i: integer):integer;

Var q,k: integer;

begin

if p=r then select:=A[p]

else

begin

q := partition(A,p,r);

k := q - p+1;

if i<=k

then select := select(A,p,q,i)

else select := select(A,q+1,r,i-k)

end;

end;

Алгоритмы внешней сортировки

Чаще всего используют метод слияния. Серия – отрезок последовательности, для которого выполняется свойство упорядоченности.

Серии распределяются на два или несколько вспомогательных файлов, затем они сливаются.

Основные характеристики сортировки слиянием:

  • количество вспомогательных файлов (если два файла – двухпутевое, если больше - многопутевое слияние)

  • Количество фаз (проходов по файлу). В двухфазовой сортировке отдельно реализуются фазы распределения и слияния. В однофазной сортировке эти действия объединяются вместе. Во время слияния элементы сразу же распределяются по вспомогательным файлам. Обычно однофазная сортировка быстрее, но требует большее количество файлов.

Идеи некоторых алгоритмов внешней сортировки

  • Простое слияние – размер серии фиксирован. Сначала берем по одному элементу, затем – по два и т.д.

  • Естественное слияние – объединяются серии максимальной длины.

Есть более сложные методы – многофазная сортировка, каскадная сортировка.

Соседние файлы в папке Лекции - Структуры и алгоритмы компьютерной обработки данных