
- •Задача сортировки
- •Сортировка – упорядочение данных
- •Цель лекции: изучить основные
- •Простые сортировки
- •Простые сортировки
- •Сортировка простыми
- •Алгоритм простыми
- •Алгоритм простыми
- •Реализация алгоритма простыми вставкам
- •Реализация алгоритма простыми вставкам
- •Эффективность алгоритма StraightInsertion
- •Эффективность алгоритма StraightInsertion
- •Сортировка простым выбором
- •Пример 1 (поиск мах)
- •Сортировка выбором
- •Сортировка выбором
- •Алгоритм сортировки
- •Обмен значений двух переменных
- •Реализация StraightSelection
- •Сортировка выбором
- •Эффективность алгоритма
- •Сортировка простыми
- •Сортировка простыми
- •Сортировка простыми обменами
- •Сортировка простыми обменами BubbleSort
- •Сортировка простыми обменами
- •Сортировка простыми обменами
- •Улучшенные сортировки
- •Сортировка Шелла
- •Сортировка Шелла
- •Шейкер-сортировка
- •Шейкер-сортировка
- •Шейкер-сортировка
- •Шейкер-сортировка (продолжение)
- •Шейкер-сортировка
- •Шейкер-сортировка
- •Быстрая сортировка QuickSort
- •Быстрая сортировка QuickSort
- •Швидке сортування Алгоритм сортування:
- •Procedure QuickSort;
- •Внешняя сортировка
- •Ключевые термины
- •Краткие итоги
- •Анализ алгоритмов сортировок
- •Эффективность алгоритма в разных случаях
- •Асимптотические обозначения и основные классы эффективности
- •Основные асимптотические классы эффективности
- •Сравнение сортировок порядка O(n2)
- •Сравнение сортировок порядка O(n log2n)
- •Сравнение сортировок

Реализация StraightSelection
Сортировка выбором
for i:= 1 to n-1 do |
|
begin |
|
min_ind:= i; |
|
for j:= i+1 to n do |
|
if a[j]<=a[min_ind] then |
|
min_ind:= j; |
|
if min_ind<>i then |
|
Begin |
|
x:= a[i]; |
|
a[i]:= a[min_ind]; |
|
a[min_ind]:= x; |
|
end; |
|
end; |
21 |

Сортировка выбором
void SelectionSort (int k,int x[max]) { int i,j,min,temp;
for (i=0;i<k-1;i++) {
//устанавливаем начальное значение минимального индекса
min=i;
//находим минимальный индекс элемента for (j=i+1;j<k;j++){
if (x[j]<x[min]) min=j;
//меняем значения местами
}
temp=x[i];
x[i]=x[min];
x[min]=temp;
} |
} |
22 |
|
||
|
|

23

Эффективность алгоритма
В лучшем случае (если исходная последовательность уже упорядочена), алгоритм произведет (N-1)*(N+2)/2 сравнений и 0 пересылок данных. В остальных же случаях количество сравнений останется прежним, а вот количество пересылок элементов массива будет равным 3*(N-1).
Таким образом, алгоритм имеет квадратичную сложность (~N2) по сравнениям и линейную (~N) - по пересылкам.
24

Сортировка простыми
обменамиАлгоритм попарногоBubbleSortсравнения элементов("пузырька") массива в литературе часто называют "методом пузырька", проводя аналогию с пузырьком, поднимающимся со дна бокала с газированной водой. По мере всплывания пузырек сталкивается с другими пузырьками и, сливаясь с ними, увеличивается в объеме. Чтобы аналогия стала очевидной, нужно считать, что элементы массива расположены вертикально друг над другом, и их нужно так упорядочить, чтобы они увеличивались сверху вниз.
25

Сортировка простыми
обменами BubbleSort
26

Сортировка простыми обменами
BubbleSort
Алгоритм состоит в повторяющихся проходах по сортируемому массиву.
За каждый проход элементы последовательно сравниваются попарно и, если порядок в паре неверный, выполняется обмен элементов.
Проходы по массиву повторяются до тех пор, пока на очередном проходе не окажется, что обмены больше не нужны, что означает – массив отсортирован. При проходе алгоритма элемент, стоящий не на своём месте,
"всплывает" до нужной позиции
27

28

Сортировка простыми обменами BubbleSort
Type
item = Record
key : Integer;
……… {описание других компонент} End;
Const N=20;
Type
index = 0..n;
Var a : Array [1..n] Of item;
29

Сортировка простыми обменами
BubbleSort
Procedure BubbleSort;
Var |
|
i,j |
: index; |
x |
: item; |
Begin
For i:=2 To n Do
For j:=n DownTo i Do
If a[j–1].key > a[j].key Then Begin
x:=a[j–1];
a[j–1]:=a[j];
a[j]:=x
End;
End;
30