517e6f74fb09ce068f7132e7ca117ed2.ppt
- Количество слайдов: 23
ТЕМА УРОКА: «АЛГОРИТМЫ СОРТИРОВКИ» Дисциплина ОП. 08 Теория алгоритмов Преподаватель Скряго О. С. Смоленск 2014
1. 2. 3. 4. 5. 6. В чем состоит задача сортировки? Зачем нужно изучать сортировку? Сортировка пузырьком Сортировка выбором Сортировка вставками Сортировка слиянием
1. В ЧЕМ СОСТОИТ ЗАДАЧА СОРТИРОВКИ? Сортировка – упорядоч. Ение заданного списка элементов. Вход: последовательность, состоящая из n чисел (a 1, a 2, …, an). Выход: перестановка (изменение порядка) (a 1’, a 2’, …, an’) входной последовательности таким образом, что a 1’ ≤ a 2’ ≤ … ≤ an’. Входная последовательность представляется в виде nэлементного массива.
1. В ЧЕМ СОСТОИТ ЗАДАЧА СОРТИРОВКИ? Устойчивый алгоритм – не меняет относительное расположение одинаковых элементов в массиве. Если номера двух одинаковых элементов i < j, то в отсортированном списке i’ < j’ Обменный (in-place) алгоритм – для его работы не требуется дополнительная память, которая зависит от размера массива.
1. В ЧЕМ СОСТОИТ ЗАДАЧА СОРТИРОВКИ? Как правило, сортируются только ключи, которые существуют в записях (строчка в таблице, список, объект) Базовая операция – сравнение двух элементов: ai ≤ aj (кроме некоторых специальных алгоритмов) Время работы: Ω(n log n) Рассматривается возрастанию сортировка по
2. ЗАЧЕМ НУЖНО ИЗУЧАТЬ СОРТИРОВКУ? Во многих приложениях нужно сортировать данные Выдача информации (отчеты, списки) Сортировка для бинарного поиска Геометрические алгоритмы (вывод графики, поиск выпуклой оболочки) Многие алгоритмы требуют предварительную сортировку данных Алгоритмы сортировки – прекрасный способ изучения алгоритмов (большое количество алгоритмов, много техник).
СОРТИРОВКА ПУЗЫРЬКОМ (BUBBLE SORT)
3. СОРТИРОВКА ПУЗЫРЬКОМ Суть алгоритма: многократный проход по списку и сравнение двух соседних элементов. Если ai > ai+1, то элементы меняются местами. На первом проходе в конец списка перемещается ( «всплывает» ) самый большой элемент, на втором проходе – всплывает второй по величине
3. СОРТИРОВКА ПУЗЫРЬКОМ Алгоритм 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(n 2) Разные случаи: нет Модификация: если проходе нет обмена – список отсортирован
СОРТИРОВКА ВЫБОРОМ (SELECTION SORT)
4. СОРТИРОВКА ВЫБОРОМ Суть алгоритма: проходим по списку, ищем наименьший элемент и меняем местами с первым элементом. Далее находим второй наименьший элемент и меняем его местами со вторым элементом и т. д. Есть другой вариант: ищем наибольший элемент и меняем местами с последним элементом.
4. СОРТИРОВКА ВЫБОРОМ Алгоритм 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(n 2) Разные случаи: нет
СОРТИРОВКА ВСТАВКАМИ (INSERTION SORT)
5. СОРТИРОВКА ВСТАВКАМИ Суть алгоритма: делим список на отсортированную часть и неотсортированную. Изначально в отсортированную часть попадает первое значение списка. Далее сравниваем следующее значение со значениями в отсортированном списке и ставим его в нужном порядке, после чего отсортированная часть увеличивается на 1.
5. СОРТИРОВКА ВСТАВКАМИ Алгоритм 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
5. СОРТИРОВКА ВСТАВКАМИ Время работы: O(n 2) в худшем случае, O(n) в лучшем случае. Разные случаи: да, зависит от характера входных данных. Чем ближе входные данные к отсортированным – тем меньше сравнений.
СОРТИРОВКА СЛИЯНИЕМ (MERGE SORT)
6. СОРТИРОВКА СЛИЯНИЕМ Суть алгоритма: список рекурсивно делится пополам, после чего каждая половина рекурсивно сортируется, после чего две половины сливаются в один отсортированный массив. Список рекурсивно делится пополам, пока все подмассивы не будут содержать 1 или 0 элементов. Если сортируемый список нечетный – один из подмассивов будет пустым.
Алгоритм Mergesort (A[0…n-1]) 6. СОРТИРОВКА СЛИЯНИЕМ 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)
6. СОРТИРОВКА СЛИЯНИЕМ Алгоритм Merge (B[0…p-1], C[0…q-1], A[0…p+q -1) i=0; j=0; k=0 While i
6. СОРТИРОВКА СЛИЯНИЕМ
6. СОРТИРОВКА СЛИЯНИЕМ Время работы: O(n log n) в худшем случае, O(n log n) в лучшем случае. Разные случаи: да, зависит от характера входных данных, но не значительно Требует n дополнительной памяти для подмассивов
СРАВНИТЕЛЬНАЯ ТАБЛИЦА Худший Средний СОРТИРОВОК Сортировка Лучший случай Пузырькова я O(n 2) Пузырькова я (м) O(n 2) O(n) Вставками O(n 2) O(n) Выбором O(n 2) Слиянием O(n log n)


