Слайд 1
ТЕМА УРОКА: «АЛГОРИТМЫ СОРТИРОВКИ»
Дисциплина ОП.08 Теория алгоритмов
Преподаватель Скряго О.С.
Смоленск 2014
Слайд 2В чем состоит задача сортировки?
Зачем нужно изучать сортировку?
Сортировка пузырьком
Сортировка выбором
Сортировка вставками
Сортировка
слиянием
Слайд 31. В ЧЕМ СОСТОИТ ЗАДАЧА СОРТИРОВКИ?
Сортировка – упорядочЕние заданного списка элементов.
Вход:
последовательность, состоящая из n чисел (a1, a2, …, an).
Выход: перестановка (изменение порядка) (a1’, a2’,…, an’) входной последовательности таким образом, что a1’ ≤ a2’ ≤ … ≤ an’.
Входная последовательность представляется в виде n-элементного массива.
Слайд 41. В ЧЕМ СОСТОИТ ЗАДАЧА СОРТИРОВКИ?
Устойчивый алгоритм – не меняет относительное
расположение одинаковых элементов в массиве.
Если номера двух одинаковых элементов i < j, то в отсортированном списке i’ < j’
Обменный (in-place) алгоритм – для его работы не требуется дополнительная память, которая зависит от размера массива.
Слайд 51. В ЧЕМ СОСТОИТ ЗАДАЧА СОРТИРОВКИ?
Как правило, сортируются только ключи, которые
существуют в записях (строчка в таблице, список, объект)
Базовая операция – сравнение двух элементов: ai ≤ aj (кроме некоторых специальных алгоритмов)
Время работы: Ω(n log n)
Рассматривается сортировка по возрастанию
Слайд 62. ЗАЧЕМ НУЖНО ИЗУЧАТЬ СОРТИРОВКУ?
Во многих приложениях нужно сортировать данные
Выдача информации
(отчеты, списки)
Сортировка для бинарного поиска
Геометрические алгоритмы (вывод графики, поиск выпуклой оболочки)
Многие алгоритмы требуют предварительную сортировку данных
Алгоритмы сортировки – прекрасный способ изучения алгоритмов (большое количество алгоритмов, много техник).
Слайд 7СОРТИРОВКА ПУЗЫРЬКОМ
(BUBBLE SORT)
Слайд 83. СОРТИРОВКА ПУЗЫРЬКОМ
Суть алгоритма: многократный проход по списку и сравнение двух
соседних элементов. Если ai > ai+1, то элементы меняются местами.
На первом проходе в конец списка перемещается («всплывает») самый большой элемент, на втором проходе – всплывает второй по величине элемент и т.д.
Слайд 93. СОРТИРОВКА ПУЗЫРЬКОМ
Алгоритм Bubble sort (A[0…n-1])
for i=0 to n-2 do
for j=0 to n-2-i do
if A[j+1] < A[j]
обмен A[j] и A[j+1]
Время работы: O(n2)
Разные случаи: нет
Модификация: если при проходе нет обмена – список отсортирован
Слайд 10СОРТИРОВКА ВЫБОРОМ
(SELECTION SORT)
Слайд 114. СОРТИРОВКА ВЫБОРОМ
Суть алгоритма: проходим по списку, ищем наименьший элемент и
меняем местами с первым элементом. Далее находим второй наименьший элемент и меняем его местами со вторым элементом и т.д.
Есть другой вариант: ищем наибольший элемент и меняем местами с последним элементом.
Слайд 124. СОРТИРОВКА ВЫБОРОМ
Алгоритм Selection sort (A[0…n-1])
for i=0 to n-2 do
min=i
for j=i+1 to n-1 do
if A[j] < A[min]
min=j
обмен A[j] и A[min]
Время работы: O(n2)
Разные случаи: нет
Слайд 13СОРТИРОВКА ВСТАВКАМИ (INSERTION SORT)
Слайд 145. СОРТИРОВКА ВСТАВКАМИ
Суть алгоритма: делим список на отсортированную часть и неотсортированную.
Изначально в отсортированную часть попадает первое значение списка.
Далее сравниваем следующее значение со значениями в отсортированном списке и ставим его в нужном порядке, после чего отсортированная часть увеличивается на 1.
Потом берем следующее значение и т.д.
Слайд 155. СОРТИРОВКА ВСТАВКАМИ
Алгоритм Insertion sort (A[0…n-1])
for i=1 to n-1 do
v=A[i]
j=i-1
while j≥0 AND A[j]>v do
A[j+1]=A[j]
j=j-1
A[j+1]=v
Слайд 165. СОРТИРОВКА ВСТАВКАМИ
Время работы: O(n2) в худшем случае, O(n) в лучшем
случае.
Разные случаи: да, зависит от характера входных данных. Чем ближе входные данные к отсортированным – тем меньше сравнений.
Слайд 17СОРТИРОВКА СЛИЯНИЕМ
(MERGE SORT)
Слайд 186. СОРТИРОВКА СЛИЯНИЕМ
Суть алгоритма: список рекурсивно делится пополам, после чего каждая
половина рекурсивно сортируется, после чего две половины сливаются в один отсортированный массив.
Список рекурсивно делится пополам, пока все подмассивы не будут содержать 1 или 0 элементов.
Если сортируемый список нечетный – один из подмассивов будет пустым.
Слайд 196. СОРТИРОВКА СЛИЯНИЕМ
Алгоритм Mergesort (A[0…n-1])
if n>1
Копировать A[0…n/2-1] в B[0…n/2-1]
Копировать A[n/2…n-1] в С[0…n/2-1]
Mergesort (B[0…n/2-1])
Mergesort (С[0…n/2-1])
Merge (B,C,A)
Слайд 206. СОРТИРОВКА СЛИЯНИЕМ
Алгоритм Merge (B[0…p-1], C[0…q-1], A[0…p+q-1)
i=0; j=0; k=0
While i
j if B[i]≤C[j]
A[k]=B[i]; i=i+1
else
A[k]=C[j]; j=j+1
k=k+1
if i=p
Копировать C[j…q-1] в A[k…p+q-1]
Else
Копировать B[i…p-1] в A[k…p+q-1]
Слайд 226. СОРТИРОВКА СЛИЯНИЕМ
Время работы: O(n log n) в худшем случае, O(n
log n) в лучшем случае.
Разные случаи: да, зависит от характера входных данных, но не значительно
Требует n дополнительной памяти для подмассивов
Слайд 23СРАВНИТЕЛЬНАЯ ТАБЛИЦА СОРТИРОВОК