Сортировка с помощью дерева

Сортировка

Сортировка

Сортировка

| 44 | 18 | 06 | 42 | 94 | 55 | 12 |~67"



 


| 06 | 18 | 12 | 42 | 44 | 55 || 94 |~б7

XXAKKKK7

| 06 | 12 I 18 | 42 | 44 | 55 | 67 | эЦ

Рис. 3.5. Пример сортировки Шелла

Приводимая программа не ориентирована на некую определенную последовательность расстояний. Все t расстояний обозначаются соответственно hi, hi, ..., ht, для них выполняются условия:

ht=\;

hi+i < ht.


Каждая /ьсортировка программируется как сортировка с помощью прямого включения.

Анализ алгоритма.При анализе алгоритма возникают очень сложные математические задачи, многие из которых ещё не решены [3, 9]. В частности, не известно, какие расстояния дают наилучшие результаты. Однако выявлен удивительный факт, что они не должны быть множителями друг другу. Дональд Кнут рекомендует такую последовательность [9]:

1 3 7 15 31 где

hk_x=2hk+ l;

ht= 1 и r=[log2«]-l. В этом случае затраты на сортировку п элементов пропорциональны п ' .

Метод сортировки с помощью прямого выбора основан на повторяющихся поисках наименьшего ключа среди п элементов, затем среди п-\ элементов и так далее. Улучшить сортировку можно в том случае, если получать от каждого прохода больше информации, чем просто идентификация единственного элемента [1,3,9,10,13]. Например, с помощью п/2 сравнений можно определить наименьший ключ из каждой пары элементов; при помощи следующих п1А сравнений можно выбрать наименьший из каждой пары уже выбранных наименьших ключей; наконец, при помощи п-\ сравнения можно построить дерево выбора и определить корень как наименьший ключ (рис. 3.6).

Рис. 3.6. Повторяющиеся наборы среди двух ключей

На втором шаге спускаемся по пути, указанному наименьшим ключом и исключаем его, последовательно заменяя на «дыру», либо на элемент, находящийся на противоположной ветви промежуточного узла (рис. 3.7).

Элемент, оказавшийся в корне дерева, вновь имеет наименьший ключ и может быть исключен. После п шагов дерево становится пустым, и процесс сортировки заканчивается. Каждый из п шагов требует logw сравнений. Поэтому вся сортировка требует n-\og2n операций, не считая п шагов на построение дерева. Это значительное улучшение по сравнению с прямым методом выбора, который


требует п шагов, но и даже по сравнению с сортировкой Шелла, которая требует п ' шага.

щ [н] QU и и и □ и

ЗАПОЛНЕНИЕ «ДЫРОК»