Реферат: Сортировка данных в массиве

На первом проходе производится n сравнений, а больший подсписок содержит n-1 элементов. На следующем проходе этот подсписок требует n-1 сравнений и дает подсписок из n-2 элементов и т.д. Общее число сравнений равно:

n + n-1 + n-2 + ... + 2 = n(n+1)/2 - 1

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

Алгоритм QuickSort выбирается за основу в большинстве универсальных сортирующих утилит. Если вы не можете смириться с производительностью наихудшего случая, используйте пирамидальную сортировку – более устойчивый алгоритм, сложность которого равна O(n log2n) и зависит только от размера списка.

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

Мы сравнили алгоритмы сортировки, испытав их на массивах, содержащих 4000, 8000, 10000, 15000 и 20000 целых чисел, соответственно. Время выполнения измерено в тиках (1/60 доля секунды). Среди всех алгоритмов порядка O(n2) время сортировки вставками отражает тот факт, что на i-ом проходе требуется лишь i/2 сравнений. Этот алгоритм явно превосходит все прочие сортировки порядка O(n2). Заметьте, что самую худшую общую производительность демонстрирует сортировка методом пузырька. Результаты испытаний показаны в таблице 1 и на рисунке 7.

Для иллюстрации эффективности алгоритмов сортировки в экстремальных случаях используются массивы из 20000 элементов, отсортированных по возрастанию и по убыванию. При сортировке методом пузырька и сортировке вставками выполняется только один проход массива, упорядоченного по возрастанию, в то время как сортировка посредством выбора зависит только от размера списка и производит 19999 проходов. Упорядоченность данных по убыванию является наихудшим случаем для пузырьковой, обменной и сортировки вставками, зато сортировка выбором выполняется, как обычно.

n Обменная сортировка Сортировка выбором Пузырьковая сортировка Сортировка вставками
4 000 12.23 17.30 15.78 5.67
8 000 49.95 29.43 64.03 23.15
10 000 77.47 46.02 99.10 35.43
15 000 173.97 103.00 223.28 80.23
20 000 313.33 185.05 399.47 143.67

Рис.7 Сравнение сортировок порядка O(n2)

n Обменная сортировка Сортировка выбором Пузырьковая сортировка Сортировка вставками
8 000 (упорядочен по возрастанию) 185.27 185.78 0.03 0.05
8 000 (упорядочен по убыванию) 526.17 199.00 584.67 286.92

В общем случае QuickSort является самым быстрым алгоритмом. Благодаря своей эффективности, равной O(n log2n), он явно превосходит любой алгоритм порядка O(n2). Судя по результатам испытаний, приведенных в следующей таблице, он также быстрее любой из сортировок порядка O(n log2n), рассмотренных нами в прошлом номере. Обратите внимание, что эффективность «быстрой» сортировки составляет O(n log2n) даже в экстремальных случаях. Зато сортировка посредством поискового дерева становится в этих случаях O(n2) сложной, так как формируемое дерево является вырожденным.

n Турнирная сортировка Сортировка посредством дерева Пирамидальная сортировка "Быстрая" сортировка
4 000 0.28 0.32 0.13 0.07
8 000 0.63 0.68 0.28 0.17
10 000 0.90 0.92 0.35 0.22
15 000 1.30 1.40 0.58 0.33
20 000 1.95 1.88 0.77 0.47
8 000 (упорядочен по возрастанию) 1.77 262.27 0.75 0.23
8 000 (упорядочен по убыванию) 1.65 275.70 0.80 0.28

Рис.8 Сравнение сортировок порядка O(n log2n)

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

Эта программа осуществляет сравнение алгоритмов сортировки данных, представленных на рисунках 7 и 8. Здесь мы приводим только базовую структуру программы. Хронометраж производится с помощью функции TickCount, возвращающей число 1/60 долей секунды, прошедших с момента старта программы.

#include <iostream.h>

#include "arrsort.h"

// Перечислимый тип, описывающий начальное состояние массива данных.

enum Ordering {randomorder, ascending, descending};

// Перечислимый тип, идентифицирующий алгоритм сортировки.

enum SortType

{

SortTypeBegin,

exchange = SortTypeBegin,

selection,

bubble,

insertion,

tournament,

tree,

heap,

quick,

К-во Просмотров: 596
Бесплатно скачать Реферат: Сортировка данных в массиве