Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Презентации 2часть / Лекция_22_Улучшенная сортировка.ppt
Скачиваний:
28
Добавлен:
11.05.2015
Размер:
135.17 Кб
Скачать

Тема 3б. Улучшенные методы сортировки массивов

Основные направления улучшения методов сортировки

Метод слиянияМетод быстрой сортировки Хоара

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

07/02/19

1

Из предыдущей лекции мы знаем, что

Прямые методы внутренней сортировки можно разбить на три категории

– сортировка с помощью

прямого обмена,

прямого включения,

прямого выбора

Эффективность этих методов оценивается как

О(n2)

07/02/19

2

Оценим затраты на сортировку n=105 элементов n2=1010.

Допустим, производительность ПК 106 оп/с Следовательно ПК будет сортировать 104 с ~ 2.5 часа

Вопросы: 1) как придумать более быстрые алгоритмы? 2) какова их предельная эффективность?

Теория показывает, что для хаотически перемешанного массива предельная эффективность

 

О(n log2n)

 

Много это, или мало?

 

 

Оценим для n=105

 

 

n log2n=105log2105=1.7 106

 

Компьютер отсортирует наш массив

3

07/02/19

за 1.7секунды!!!

 

 

Улучшенные методы сортировки эффективность О(n log2n)

Никлаус Вирт, Род Стивенс

Метод Д.Шелла (1959) усовершенствование метода прямого включения.

Сортировка пирамидальная (с помощью дерева) метод HeapSort, Д. Уильямсон, (1964) усовершенствование метода прямого выбора.

Сортировка с помощью разделения, метод QuickSort, Ч. Хоар, (1962), улучшенная версия пузырьковой сортировки. На сегодняшний день это самый эффективный метод внутренней сортировки.

Сортировка слиянием (привлечение дополнительных массивов) Не уступает по скорости методу Хоара.

07/02/19

4

Идея метода Шелла

Основной недостаток метода включения в том, что приходится передвигать элементы находящиеся левее вставляемого

Шелл предложил для минимизации сдвигов производить сначала сортировки элементов, отстоящих друг от друга на 4 позиции, потом на 2 и наконец на одну

Четвертная сортировка 5 7 4 1 3 6 2 8

Двойная сортировка 3 6 2 1 5 7 4 8

Одинарная сортировка

07/02/19Результат

2

1

3

6

4

7

5

8

 

1

2

3

4

5

6

7

8

5

Идея пирамидальной сортировки

Массив представляется в виде пирамидальной структуры.

Нахождение минимального элемента и его перестановка производится не с первым элементом, а с элементом со следующего уровня

4 9 8 3 2 1 6 4 2 1 3 9 8 6 1 2 4 3 9 8 6

4

4

1

9

8

2

1

2

4

3

2

1

6

3

9

8

6

3

9

8

6

07/02/19

6

1 2 4 3 9 8 6

1 2 4 3 9 8 6

1 2 3 4 9 8 6

 

2

 

 

4

 

4

 

4

3

3

9

9

8

 

 

 

9

8

6

8

6

6

 

 

 

 

 

1 2 3 4 6 8 9

Массив 6 упорядочен

8 9

07/02/19

7

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

Строится пирамида в виде дерева поиска после этого производится обход этого дерева

4 2 8 3 9 1 6

4

 

2 8

1

3

6

9

07/02/19

8

Сортировка слиянием

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

Идея метода основана на следующем эффективном алгоритме слияния.

Пусть внутри массива a[1..n] имеется два смежных

отсортированных участка (например, по возрастанию ключа) a[L, m], a[m+1,R] 1≤L<R≤n.

a1….aL...am, am+1...aR….an

Необходимо отсортировать весь участок a[L,R].

Процедура сортировки для этого участка организуется специфическим слиянием двух участков в один рабочий массив

07/02/19

C1…CR-L+1

9

Напомним, что тип массива записей введен следующим образом

type

 

 

 

Tinf=<описать

свой

тип

информации>;

Tk= <описать

свой

тип

ключа>;

Tzp=record

zp:Tinf;//поле информации

k:Tk;//поле ключа

end;

Mas=array[1..1] of Tzp;//Массив записей

Tmas=^mas;

Var a:Tmas;

Begin

n:=. . .;

getmem(a,n*sizeof(Tzp));

07/02/19

10