Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
23
Добавлен:
12.05.2015
Размер:
76.56 Кб
Скачать

10

Выводы

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

Сортировка – это упорядочивание набора однотипных данных по возрастанию или убыванию.

Если провести анализ данных алгоритмов, то можно определить их слабые и сильные стороны. Сортировка выборкой [+] Простота реализации. [+] Простая логика работы. [+] Быстро работает с малыми объемами данных или на почти отсортированных массивах. [-] На средних и больших объемах данных работает медленнее всех представленных сдесь алгоритмов. Сортировка методом пузырька [+] Простота реализации. [+] Наглядность. [+] Идеален для обучения. [+] Быстро работает с малыми объемами данных или на почти отсортированных массивах. [-] Используется только в учебных и непрофессиональных программах. [-] Медленная работа на больших и средних объемах данных. Быстрая сортировка [+] Наиболее универсальный метод. [+] Получил широкое распространение. [+] Быстро работает на больших и средних массивах. [-] Сложней в реализации, чем первые 3. [-] Нерационально использовать для малых объемов данных.

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

Мы сравнили алгоритмы сортировки, испытав их на массивах, содержащих 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 долей секунды, прошедших с момента старта программы.

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

Существует множество различных алгоритмов сортировки. Все они имеют свои положительные и отрицательные стороны. Перечислим общие критерии оценки алгоритмов сортировки.

  • Скорость работы алгоритма сортировки. Она непосредственно связана с количеством сравнений и количеством обменов, происходящих во время сортировки, причем обмены занимают больше времени. Сравнение происходит тогда, когда один элемент массива сравнивается с другим; обмен происходит тогда, когда два элемента меняются местами. Время работы одних алгоритмов сортировки растет экспоненциально, а время работы других логарифмически зависит от количества элементов.

  • Время работы в лучшем и худшем случаях. Оно имеет значение при анализе выполнения алгоритма, если одна из краевых ситуаций будет встречаться довольно часто. Алгоритм сортировки зачастую имеет хорошее среднее время выполнения, но в худшем случае он работает очень медленно.

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

Различные сортировки массивов отличаются по быстродействию. Существуют простые методы сортировок, которые требуют порядка n*n сравнений, где n – количество элементов массива и быстрые сортировки, которые требуют порядка n*ln(n) сравнений. Простые методы удобны для объяснения принципов сортировок, т.к. имеют простые и короткие алгоритмы. Усложненные методы требуют меньшего числа операций, но сами операции более сложные, поэтому для небольших массивов простые методы более эффективны.

Простые методы сортировки можно разделить на три основные категории:

  • сортировка методом "пузырька" (простого обмена);

  • сортировка методом простого выбора (простой перебор);

  • сортировка методом простого включения (сдвиг-вставка, вставками, вставка и сдвиг).

Контрольные вопросы

  1. Почему существует большое количество алгоритмов сортировок?

  2. С какой целью используются простые сортировки, если они характеризуются малой эффективностью?

  3. Чем отличается принцип сортировки по неубыванию (невозрастанию) от сортировки по возрастанию (убыванию)?

  4. На каких наборах исходных данных проявляется эффективность алгоритмов простых сортировок по сравнению друг с другом?

  5. В чем заключается улучшение метода шейкер-сортировки по сравнению с пузырьковой сортировкой?

Ключевые термины

Ключ сортировки – это часть данных, определяющая порядок элементов. При решении задач сортировок массивов ключ и данные совпадают.

Сортировка – это упорядочивание набора однотипных данных по возрастанию или убыванию.

Сортировка методом "пузырька" – это алгоритм попарного сравнения элементов одномерного массива.

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

Сортировка методом простого выбора – это алгоритм последовательного обмена минимального и первого элементов неотсортированной части массива.

Краткие итоги

  1. Задачи сортировок массивов имеют широкое прикладное значение.

  2. Существует большое количество алгоритмов сортировок массивов, различающихся трудоемкостью.

  3. При оценке трудоемкости алгоритмов учитываются критерии: количество сравнений и перестановок, время в лучшем и худшем случаях, естественность поведения.

  4. К алгоритмам простых сортировок относятся: сортировка методом "пузырька", сортировка методом простого выбора, сортировка методом простого включения.

  5. Простые сортировки эффективны на небольших объемах данных.

Ключевые термины

Алгоритм сортировки – это алгоритм для упорядочения некоторого множества элементов.

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

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

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

Внутренняя сортировка – это алгоритм сортировки, который в процессе упорядочивания данных использует только оперативную память (ОЗУ) компьютера.

Время сортировки – основной параметр трудоемкости алгоритма, характеризующий быстродействие алгоритма сортировки.

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

Ключ сортировки – это атрибут (или несколько атрибутов), по значению которого определяется порядок элементов во множестве.

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

Память – один из параметров трудоемкости алгоритма, который характеризует размер выделяемой дополнительной памяти под временное хранение данных.

Пирамида (сортирующее дерево, двоичная куча) – это двоичное дерево с упорядоченными листьями, в корне которого расположен максимальный или минимальный элемент.

Просеивание – это построение новой пирамиды посредством спуска вниз элемента из вершины дерева в соответствии с ключом сортировки

Слияние – это объединение двух или более упорядоченных массивов в один упорядоченный.

Сортировка слиянием – это одна из разновидностей алгоритмов быстрых сортировок, основанная на слиянии подмножеств массива.

Сортировка Хоара – это одна из разновидностей быстрых сортировок, основанная на упорядочивании подмножеств массива относительно опорных элементов.

Сортировка Шелла – это алгоритм внутренней сортировки, основанный на сравнении и перемещении пар значений, расположенных сначала достаточно далеко друг от друга в упорядочиваемом наборе данных, с дальнейшим сокращением расстояний между ними.

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

Соседние файлы в папке Литература