78
1 Соколова Наталья Валентиновна, преподаватель спец. Дисциплин [email protected] дисциплина «Основы алгоритмизации и программирования 2 курс

Методы сортировки данных

Embed Size (px)

DESCRIPTION

Методы сортировки данных. дисциплина «Основы алгоритмизации и программирования 2 курс. Соколова Наталья Валентиновна, преподаватель спец. Дисциплин [email protected]. - PowerPoint PPT Presentation

Citation preview

Page 1: Методы сортировки  данных

1

Соколова Наталья Валентиновна, преподаватель спец. Дисциплин[email protected]

дисциплина «Основы алгоритмизации и программирования 2 курс

Page 2: Методы сортировки  данных

2

Сортировка объектов – расположение объектов по возрастанию или убыванию согласно определенному линейному отношению порядка

Page 3: Методы сортировки  данных

3

Сортировка объектов:

–Внутренняя–Внешняя

Page 4: Методы сортировки  данных

4

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

Данные обычно сортируются на том же месте, без дополнительных затрат

Page 5: Методы сортировки  данных

5

Page 6: Методы сортировки  данных

6

Алгоритм сортировки

вставкой

Page 7: Методы сортировки  данных

7

Суть сортировки:

Упорядочиваются два элемента массива

Вставка третьего элемента в соответствующее место по отношению к первым двум элементам.

Этот процесс повторяется до

тех пор, пока все элементы не будут упорядочены.

Page 8: Методы сортировки  данных

8

Сортировка вставкой

13

6 2 10

813

6 82 13

6 8 8 13

13

106<13 8>6 8<132<6 2<8 2<13 10<13

Массив отсортирован по возрастанию

Page 9: Методы сортировки  данных

9

Пусть нужно отсортировать массив А по возрастанию, в котором N элементов методом вставки

Вспомогательные переменные

j – номер первого элемента остатка.

i – номер перемещаемого элемента.

f – условие выхода из цикла (если f=1, то выход)

Val – промежуточное значение, используемое для перемещения элементов массив

Постановка задачи

Page 10: Методы сортировки  данных

10

Начало алгоритма.Шаг 1 j:=2,Шаг 2 Пока j<=N выполнять:

Шаг 2.1 i:=j; f:=0,Шаг 2.2 Пока i>=2 и f=0 выполнять:

Шаг 2.2.1 Если A[i-1]>A[i] то Val:=A[i-1];

A[i-1]:=A[i]; A[i]:=Val,

иначе f:=1,Шаг 2.2.2 i:=i-1,

Шаг 2.3 j:=j+1.Конец алгоритма.

Page 11: Методы сортировки  данных

11

Начало алгоритма.Шаг 1 j:=2,Шаг 2 Пока j<=N выполнять:

Шаг 2.1 i:=j; f:=0,Шаг 2.2 Пока i>=2 и f=0 выполнять:

Шаг 2.2.1 Если A[i-1]>A[i] то Val:=A[i-1];

A[i-1]:=A[i]; A[i]:=Val,

иначе f:=1,Шаг 2.2.2 i:=i-1,

Шаг 2.3 j:=j+1.Конец алгоритма.

Что обозначает данное условие?

Page 12: Методы сортировки  данных

12

Начало алгоритма.Шаг 1 j:=2,Шаг 2 Пока j<=N выполнять:

Шаг 2.1 i:=j; f:=0,Шаг 2.2 Пока i>=2 и f=0 выполнять:

Шаг 2.2.1 Если A[i-1]>A[i] то Val:=A[i-1];

A[i-1]:=A[i]; A[i]:=Val,

иначе f:=1,Шаг 2.2.2 i:=i-1,

Шаг 2.3 j:=j+1.Конец алгоритма.

Почему стартовое значение j =2 ?

Page 13: Методы сортировки  данных

13

Начало алгоритма.Шаг 1 j:=2,Шаг 2 Пока j<=N выполнять:

Шаг 2.1 i:=j; f:=0,Шаг 2.2 Пока i>=2 и f=0 выполнять:

Шаг 2.2.1 Если A[i-1]>A[i] то Val:=A[i-1];

A[i-1]:=A[i]; A[i]:=Val,

иначе f:=1,Шаг 2.2.2 i:=i-1,

Шаг 2.3 j:=j+1.Конец алгоритма.

Почему стартовое значение i =2 ?

Page 14: Методы сортировки  данных

14

Начало алгоритма.Шаг 1 j:=2,Шаг 2 Пока j<=N выполнять:

Шаг 2.1 i:=j; f:=0,Шаг 2.2 Пока i>=2 и f=0 выполнять:

Шаг 2.2.1 Если A[i-1]>A[i] то Val:=A[i-1];

A[i-1]:=A[i]; A[i]:=Val,

иначе f:=1,Шаг 2.2.2 i:=i-1,

Шаг 2.3 j:=j+1.Конец алгоритма.

Всегда ли происходит обмен входного j элемента с отсортированным элементом ?

Page 15: Методы сортировки  данных

15

Начало алгоритма.Шаг 1 j:=2,Шаг 2 Пока j<=N выполнять:

Шаг 2.1 i:=j; f:=0,Шаг 2.2 Пока i>=2 и f=0 выполнять:

Шаг 2.2.1 Если A[i-1]>A[i] то Val:=A[i-1];

A[i-1]:=A[i]; A[i]:=Val,

иначе f:=1,Шаг 2.2.2 i:=i-1,

Шаг 2.3 j:=j+1.Конец алгоритма.

Возможно ли заменить цикл ПОКА и ЕСЛИ одним циклом ПОКА с условием i>=2 и A[i-1]>A[i] ?

Page 16: Методы сортировки  данных

16

Начало алгоритма.Шаг 1 j:=2,Шаг 2 Пока j<=N выполнять:

Шаг 2.1 i:=j; f:=0,Шаг 2.2 Пока i>=2 и f=0 выполнять:

Шаг 2.2.1 Если A[i-1]>A[i] то Val:=A[i-1];

A[i-1]:=A[i]; A[i]:=Val,

иначе f:=1,Шаг 2.2.2 i:=i-1,

Шаг 2.3 j:=j+1.Конец алгоритма.

Для чего нужен этот оператор?

Page 17: Методы сортировки  данных

17

Алгоритм сортировки

выбором

Page 18: Методы сортировки  данных

18

Суть сортировки:Выбирается элемент с

наименьшим значением и делается его обмен с первым элементом массива.

Затем находится элемент с наименьшим значением из оставшихся n-1 элементов и делается его обмен со вторым элементом и т.д. до обмена двух последних элементов.

Page 19: Методы сортировки  данных

19

13

6 2 10

8

Сортировка выбором

2 6 8 1310

13Отсортиро-

ванная часть

Отсортированная часть

Отсортированная частьМассив отсортирован по возрастанию

Page 20: Методы сортировки  данных

20

Постановка задачи

Пусть нужно отсортировать массив А по возрастанию, в котором N элементов методом выбора.

Вспомогательные переменные

j – номер первого элемента остатка.

i – номер перемещаемого элемента.

min – минимальное число в массиве.

Imin – номер минимального числа в массиве

Page 21: Методы сортировки  данных

21

Начало алгоритма.Шаг 1 j:=1,Шаг 2 Пока j<=N-1 выполнять: Шаг 2.1 min:=a[j], Imin:=j, i:=j+1 Шаг 2.2 Пока i<=N выполнять:

Шаг 2.2.1 Если A[i]<min, то min:=a[i], Imin:=i

Шаг 2.2.2 i:=i+1, Шаг 2.3 A[Imin]:=A[j], A[j]:=min Шаг 2.4 j:=j+1. Конец алгоритма.

Page 22: Методы сортировки  данных

22

Начало алгоритма.Шаг 1 j:=1,Шаг 2 Пока j<=N-1 выполнять: Шаг 2.1 min:=a[j], Imin:=j, i:=j+1 Шаг 2.2 Пока i<=N выполнять:

Шаг 2.2.1 Если A[i]<min, то min:=a[i], Imin:=i

Шаг 2.2.2 i:=i+1, Шаг 2.3 A[Imin]:=A[j], A[j]:=min Шаг 2.4 j:=j+1. Конец алгоритма.

Что происходит в выделенном фрагменте?

Page 23: Методы сортировки  данных

23

Начало алгоритма.Шаг 1 j:=1,Шаг 2 Пока j<=N-1 выполнять: Шаг 2.1 min:=a[j], Imin:=j, i:=j+1 Шаг 2.2 Пока i<=N выполнять:

Шаг 2.2.1 Если A[i]<min, то min:=a[i], Imin:=i

Шаг 2.2.2 i:=i+1, Шаг 2.3 A[Imin]:=A[j], A[j]:=min Шаг 2.4 j:=j+1. Конец алгоритма.

Что происходит в выделенном фрагменте?

Page 24: Методы сортировки  данных

24

Алгоритм сортировки

обменом («пузырьковая»)

Page 25: Методы сортировки  данных

25

Суть сортировки:

Последовательно просматривается массив и сравнивается каждая пара элементов между собой.

При этом "неправильное" расположение элементов устраняется путем их перестановки.

Процесс просмотра и сравнения элементов повторяется до просмотра всего массива.

Page 26: Методы сортировки  данных

26

Сортировка обменом

13

6 2 10

86 138 1

313

2 10

13

6 82 862 626<13 8<13 2<13 10<13Отсортиро-

ванная частьОтсортированная

частьОтсортированная часть

Массив отсортирован по возрастанию

6<8 8>2 8<106>2 6<86>2

Page 27: Методы сортировки  данных

27

Пусть нужно отсортировать массив А по возрастанию, в котором N элементов методом обмена

Вспомогательные переменные

j – номер первого элемента остатка.

i – номер перемещаемого элемента.

Val – промежуточное значение, используемое для перемещения элементов массива

Постановка задачи

Page 28: Методы сортировки  данных

28

Начало алгоритма.Шаг 1 j:=N,Шаг 2 Пока j>=2 выполнять:

Шаг 2.1 i:=1; ,Шаг 2.2 Пока i<=j-1выполнять:

Шаг 2.2.1 Если A[i]>A[i+1] то Val:=A[i];

A[i]:=A[i+1]; A[i+1]:=Val,

Шаг 2.2.2 i=i+1,Шаг 2.3 j:=j-1.

Конец алгоритма.

Сравнение соседних

элементов

Обмен соседних

элементов местами, в

случае если левый

больше правого Формируется

отсортированная часть

Page 29: Методы сортировки  данных

29

Начало алгоритма.Шаг 1 j:=N,Шаг 2 Пока j>=2 выполнять:

Шаг 2.1 i:=1; ,Шаг 2.2 Пока i<=j-1выполнять:

Шаг 2.2.1 Если A[i]>A[i+1] то Val:=A[i];

A[i]:=A[i+1]; A[i+1]:=Val,

Шаг 2.2.2 i=i+1,Шаг 2.3 j:=j-1.

Конец алгоритма.

Почему условие такое?

Page 30: Методы сортировки  данных

30

Начало алгоритма.Шаг 1 j:=N,Шаг 2 Пока j>=2 выполнять:

Шаг 2.1 i:=1; ,Шаг 2.2 Пока i<=j-1выполнять:

Шаг 2.2.1 Если A[i]>A[i+1] то Val:=A[i];

A[i]:=A[i+1]; A[i+1]:=Val,

Шаг 2.2.2 i=i+1,Шаг 2.3 j:=j-1.

Конец алгоритма.

Почему значение j уменьшается? Можно ли увеличивать? Что нужно изменить?

Page 31: Методы сортировки  данных

31

Алгоритм сортировки

Шелла

Page 32: Методы сортировки  данных

32

Классифицируется как «слияние вставкой»;

Называется «сортировкой с убывающим шагом»

Общий метод, который использует сортировку вставкой, применяет принцип уменьшения расстояния между сравниваемыми элементами

Page 33: Методы сортировки  данных

33

Условия реализации:

Конкретная последовательность шагов может быть другой, но последний шаг должен быть равен 1;

Следует избегать последовательность, которые являются степенями 2 (т.е. нельзя использовать последовательность шагов – 4,2)

?

?

Page 34: Методы сортировки  данных

34

Суть сортировки:Сначала сортируются все элементы, отстоящие друг от друга на три позиции

Затем сортируются элементы, расположенные на расстоянии двух позиций

Наконец, сортируются все соседние элементы

Page 35: Методы сортировки  данных

35

12

Сортировка Шелла

8 14

6 41 2 3 4 1 2

1 шаг. 4 группы из 2-х элементов

1 73 4

124 8 991 14

76

2 шаг. 2 группы из 4-х элементов

1 2 1 2 1 2 1 2

41 6 8

4<12

8<9

1<14

6<7

4>1

8>6

4<12

12

1<4

8<9

9

6<8

12<14

14

9>7

97

8>7

87

6<7

Page 36: Методы сортировки  данных

36

Сортировка Шелла

41 6

3 шаг. 1 группа из 8-ми элементов

Массив отсортирован по возрастанию

12 14

9871<6 6>4

641<4 6<74<6 7<1212>8

8 127<8 12<148<12 14>9

9 1412>9

9 128<9

Page 37: Методы сортировки  данных

37

Пусть нужно отсортировать массив А по возрастанию, в котором N элементов методом Шелла

Вспомогательные переменные

j – номер первого элемента остатка.

i – номер перемещаемого элемента.

M- оптимальный шаг

P– промежуточное значение, используемое для перемещения элементов массива

Постановка задачи

Page 38: Методы сортировки  данных

38

Начало алгоритма.Шаг 1. M=целая часть N/2Шаг 2. Пока M<>0 выполнять Шаг 2.1. i:=M+1 Шаг 2.2. Пока i<=N выполнять Шаг 2.2.1. P=A[i] Шаг 2.2.2. j=i-M Шаг 2.2.3. Пока j>0 и P<A[j] выполнять Шаг 2.2.3.1 A[j+M]=A[j]

Шаг 2.2.3.2 j=j-M Шаг 2.2.4. A[j+M]=P Шаг 2.2.5. i=i+1 Шаг 2.3. M=целая часть M/2Конец алгоритма.

Page 39: Методы сортировки  данных

39

Начало алгоритма.Шаг 1. M=целая часть N/2Шаг 2. Пока M<>0 выполнять Шаг 2.1. i:=M+1 Шаг 2.2. Пока i<=N выполнять Шаг 2.2.1. P=A[i] Шаг 2.2.2. j=i-M Шаг 2.2.3. Пока j>0 и P<A[j] выполнять Шаг 2.2.3.1 A[j+M]=A[j]

Шаг 2.2.3.2 j=j-M Шаг 2.2.4. A[j]=P Шаг 2.2.5. i=i+1 Шаг 2.3. M=целая часть M/2Конец алгоритма.

Определение максимальной величины шага

Определение первого и последнего

элемента сравнения для текущего шага

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

последовательности

Определение нового шага сравнения

Определение первого и последнего

элемента сравнения для текущего шага

Page 40: Методы сортировки  данных

40

Зачем необходимо это действие?

Начало алгоритма.Шаг 1. M=целая часть N/2Шаг 2. Пока M<>0 выполнять Шаг 2.1. i:=M+1 Шаг 2.2. Пока i<=N выполнять Шаг 2.2.1. P=A[i] Шаг 2.2.2. j=i-M Шаг 2.2.3. Пока j>0 и P<A[j] выполнять Шаг 2.2.3.1 A[j+M]=A[j]

Шаг 2.2.3.2 j=j-M Шаг 2.2.4. A[j]=P Шаг 2.2.5. i=i+1 Шаг 2.3. M=целая часть M/2Конец алгоритма.

Page 41: Методы сортировки  данных

41

Зачем необходимо это действие?

Начало алгоритма.Шаг 1. M=целая часть N/2Шаг 2. Пока M<>0 выполнять Шаг 2.1. i:=M+1 Шаг 2.2. Пока i<=N выполнять Шаг 2.2.1. P=A[i] Шаг 2.2.2. j=i-M Шаг 2.2.3. Пока j>0 и P<A[j] выполнять Шаг 2.2.3.1 A[j+M]=A[j]

Шаг 2.2.3.2 j=j-M Шаг 2.2.4. A[j]=P Шаг 2.2.5. i=i+1 Шаг 2.3. M=целая часть M/2Конец алгоритма.

Page 42: Методы сортировки  данных

42

Почему условие выхода из цикла такое?

Начало алгоритма.Шаг 1. M=целая часть N/2Шаг 2. Пока M<>0 выполнять Шаг 2.1. i:=M+1 Шаг 2.2. Пока i<=N выполнять Шаг 2.2.1. P=A[i] Шаг 2.2.2. j=i-M Шаг 2.2.3. Пока j>0 и P<A[j] выполнять Шаг 2.2.3.1 A[j+M]=A[j]

Шаг 2.2.3.2 j=j-M Шаг 2.2.4. A[j]=P Шаг 2.2.5. i=i+1 Шаг 2.3. M=целая часть M/2Конец алгоритма.

Page 43: Методы сортировки  данных

43

Алгоритм быстрой

сортировки

Page 44: Методы сортировки  данных

44

Придумана Ч.А.Р. Хоаром (Charles Antony Richard Hoare);

В основе – сортировка обменами;

Основана на делении массива

Page 45: Методы сортировки  данных

45

Суть сортировки:

Выбирается некоторое значение (x)- барьерный элемент, который определяется округлением до целого деления количества сортируемых элементов на 2;

Просматриваем массив, двигаясь слева направо, пока не найдется элемент, больший x

Затем просматриваем его справа налево, пока не найдется элемент, меньший x

Page 46: Методы сортировки  данных

46

Суть сортировки:

Меняем найденные элементы местами. В случае, если не найден наибольший или наименьший элементы, местами меняется средний элемент с найденным наибольшим или наименьшим элементом;

Дойдя до середины имеем 2 части массива;

Процесс продолжается для каждой части, пока массив не будет отсортирован

Page 47: Методы сортировки  данных

47

Быстрая сортировка

8 12

3 7 19

11

4 16

Барьерный элемент

4 3 7 812

3 4

Барьерный элемент

8 12

11

19

Барьерный элемент

12

1916

19

8>7 переносим в правую часть, т. к. 16>7 не переносим, 4<7 поэтому меняем местами 4 и 8

12>7 переносим в правую часть, т. к. 16>7, 8>7,11>7, 19>7 не переносим, 7=7 поэтому меняем местами 7 и 12

4>3Отсортиро-ванная часть

12>11 переносим в правую часть, т. к. 16>11 не переносим, 8<11 поэтому меняем местами 12 и 8

19>11 переносим в правую часть, т. к. 16>11, 12>11,не переносим, 11=11 поэтому меняем местами 11 и 19

Отсортированная часть

19>12 переносим в правую часть, т. к. 16>12,не переносим, 12=12 поэтому меняем местами 12 и 19

19>16

Массив отсортирован по возрастанию

Меньше равно 7

Больше 7

Page 48: Методы сортировки  данных

48

Пусть нужно отсортировать массив А по возрастанию, в котором n элементов быстрым методом

Вспомогательные переменные:t –конечный элемент массиваm - начальный элемент массиваx – элемент относительно которого

перемещаются все остальные элементы.w – промежуточное значение,

используемое для перемещения элементов массива

Постановка задачи

Page 49: Методы сортировки  данных

49

Начало алгоритма.Шаг 1 i=m j=tШаг 2 x=A[округление до целого(m+t)/2]Шаг 3 Пока i<=j выполнять:

Шаг 3.1 Если A[i]<x то i:=i+1, иначе Если A[j]>x то j:=j-1 иначе

w:=A[i]; A[i]:=A[j]; A[j]:=w i:=i+1, j:=j-1Шаг 4 Если m<j то Алгоритм (A, m, j); Шаг 5 Если i<t то Алгоритм (A, i, t).Конец алгоритма.

Рекурсивный вызов процедуры

Page 50: Методы сортировки  данных

50

Начало алгоритма.Шаг 1 i=m j=tШаг 2 x=A[округление до целого(m+t)/2]Шаг 3 Пока i<=j выполнять:

Шаг 3.1 Если A[i]<x то i:=i+1, иначе Если A[j]>x то j:=j-1 иначе

w:=A[i]; A[i]:=A[j]; A[j]:=w i:=i+1, j:=j-1Шаг 4 Если m<j то Алгоритм (A, m, j); Шаг 5 Если i<t то Алгоритм (A, i, t).Конец алгоритма.

Зачем необходимо это действие?

Page 51: Методы сортировки  данных

51

Начало алгоритма.Шаг 1 i=m j=tШаг 2 x=A[округление до целого(m+t)/2]Шаг 3 Пока i<=j выполнять:

Шаг 3.1 Если A[i]<x то i:=i+1, иначе Если A[j]>x то j:=j-1 иначе

w:=A[i]; A[i]:=A[j]; A[j]:=w i:=i+1, j:=j-1Шаг 4 Если m<j то Алгоритм (A, m, j); Шаг 5 Если i<t то Алгоритм (A, i, t).Конец алгоритма.

Если исключить условие и просто вызвать процедуру, что может произойти?

Page 52: Методы сортировки  данных

52

Начало алгоритма.Шаг 1 i=m j=tШаг 2 x=A[округление до целого(m+t)/2]Шаг 3 Пока i<=j выполнять:

Шаг 3.1 Если A[i]<x то i:=i+1, иначе Если A[j]>x то j:=j-1 иначе

w:=A[i]; A[i]:=A[j]; A[j]:=w i:=i+1, j:=j-1Шаг 4 Если m<j то Алгоритм (A, m, j); Шаг 5 Если i<t то Алгоритм (A, i, t).Конец алгоритма.

Если изменить условие цикла на i<j что произойдет ?

Page 53: Методы сортировки  данных

53

Начало алгоритма.Шаг 1 i=m j=tШаг 2 x=A[округление до целого(m+t)/2]Шаг 3 Пока i<=j выполнять:

Шаг 3.1 Если A[i]<x то i:=i+1, иначе Если A[j]>x то j:=j-1 иначе

w:=A[i]; A[i]:=A[j]; A[j]:=w i:=i+1, j:=j-1Шаг 4 Если m<j то Алгоритм (A, m, j); Шаг 5 Если i<t то Алгоритм (A, i, t).Конец алгоритма.

Что происходит в выделенном фрагменте?

Page 54: Методы сортировки  данных

54

Начало алгоритма.Шаг 1 i=m j=tШаг 2 x=A[округление до целого(m+t)/2]Шаг 3 Пока i<=j выполнять:

Шаг 3.1 Если A[i]<x то i:=i+1, иначе Если A[j]>x то j:=j-1 иначе

w:=A[i]; A[i]:=A[j]; A[j]:=w i:=i+1, j:=j-1Шаг 4 Если m<j то Алгоритм (A, m, j); Шаг 5 Если i<t то Алгоритм (A, i, t).Конец алгоритма.

Что происходит в выделенном фрагменте?

Page 55: Методы сортировки  данных

55

Начало алгоритма.Шаг 1 i=m j=tШаг 2 x=A[округление до целого(m+t)/2]Шаг 3 Пока i<=j выполнять:

Шаг 3.1 Если A[i]<x то i:=i+1, иначе Если A[j]>x то j:=j-1 иначе

w:=A[i]; A[i]:=A[j]; A[j]:=w i:=i+1, j:=j-1Шаг 4 Если m<j то Алгоритм (A, m, j); Шаг 5 Если i<t то Алгоритм (A, i, t).Конец алгоритма.

Что происходит с равными элементами?

Page 56: Методы сортировки  данных

56

Основывается:

• количестве необходимых сравнений

• количестве пересылок

Оценка эффективности

Page 57: Методы сортировки  данных

57

Параметры оценки алгоритмов

Время сортировки - основной параметр, характеризующий

быстродействие алгоритма Память – выделяется ли

дополнительная память под временное хранение данных

Page 58: Методы сортировки  данных

58

Устойчивость – отсортированный массив не меняет порядок элементов с одинаковыми значениями.Взаимное расположение равных элементов с ключом 1 и дополнительными полями "a", "b", "c"

Параметры оценки алгоритмов

Page 59: Методы сортировки  данных

59

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

Параметры оценки алгоритмов

Page 60: Методы сортировки  данных

60

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

•Общее количество сравнений C =N-l + N-2 + ...+ 1 = (N2-N)/2

•Общее количество операций n + (n-1) + (n-2) + (n-3) + ... + 1 = 1/2 * ( n2+n ) = Theta(n2)

•Число обменов < числа сравнений = время сортировки растет квадратично относительно количества элементов

Page 61: Методы сортировки  данных

61

Устойчив ли этот метод?

Page 62: Методы сортировки  данных

62

Если входная последовательность почти упорядочена, то сравнений

будет столько же

Page 63: Методы сортировки  данных

63

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

Для массива 1 2 3 4 5 6 7 8 потребуется N-1 сравнение.

Для массива 8 7 6 5 4 3 2 1 потребуется (N2-N)/2 сравнение.

Общее количество операций Theta(n2)

Page 64: Методы сортировки  данных

64

Устойчив ли этот метод?

порядок элементов с одинаковыми ключами не изменяется

Page 65: Методы сортировки  данных

65

Наименьшие оценки эффективности, когда элементы предварительно

упорядочены, а наибольшие – когда элементы расположены в обратном

порядке

Page 66: Методы сортировки  данных

66

Не эффективный метод, так как включение элемента связано со сдвигом всех предшествующих элементов на одну позицию, а эта операция неэкономна

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

Page 67: Методы сортировки  данных

67

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

Количество сравнений (n2-n)/2

Общее количество операцийTheta(n2)

Page 68: Методы сортировки  данных

68

Ответьте на следующие вопросы:

• Устойчив ли этот метод?

• Естественное ли поведение этого алгоритма?

Page 69: Методы сортировки  данных

69

Очень медленен и малоэффективен.

На практике, даже с улучшениями, работает,

слишком медленно, поэтому почти не применяется.

Прост, и его можно улучшать

Page 70: Методы сортировки  данных

70

Сравнение методов простой сортировки

N – количество элементов, M – кол-во пересылок, C – кол-во сравнений

Минимум Максимум

Простые включения

C = n-1 M=2(n-1)

С=(n2-n)/2М=(n2+3n-4)/2

Простой обмен

C=(n2-n)/2M=3(n-1)

С=(n2-n)/2М=n2/4+3(n-1)

Простой выбор

C=(n2-n)/2M = 0

С=(n2-n)/2М=(n2-n)*1,5?

Чему будет равно количество пересылок

Page 71: Методы сортировки  данных

71

Выбор метода сортировки

•При сортировке маленьких массивов (менее 100 элементов) лучше использовать метод «Всплывающего пузырька»;

•Если известно, что список уже почти отсортирован, то подойдет любой метод;

Page 72: Методы сортировки  данных

72

Оценка алгоритма ШеллаВремя выполнения

пропорционально n1.2, т. к. при каждом проходе используется небольшое число элементов или элементы массива уже находятся в относительном порядке, а упорядоченность увеличивается при каждом новом просмотре данных

Page 73: Методы сортировки  данных

73

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

Если размер массива равен числу, являющемуся степенью двойки (N=2g), и при каждом разделении элемент X находится точно в середине массива, тогда при первом просмотре выполняется N сравнений и массив разделится на две части размерами N/2. Для каждой из этих частей N/2 сравнений и т. д. Следовательно

C=N+2*(N/2)+4*(N/4)+...+N*(N/N).

Если N не является степенью двойки, то оценка будет иметь тот же порядок

Page 74: Методы сортировки  данных

74

Общее количество операций Theta(n).

Количество шагов деления (глубина рекурсии) составляет приблизительно log n, если массив делится на более-менее равные части. Таким образом, общее быстродействие: O(n log n)

Если каждый раз в качестве центрального элемента выбирается максимум или минимум входной последовательности, тогда быстродействие O(n2)

Page 75: Методы сортировки  данных

75

•Метод неустойчив.

•Поведение довольно естественно, если учесть, что при частичной упорядоченности повышаются шансы разделения массива на более равные части

•Сортировка использует дополнительную память

Page 76: Методы сортировки  данных

76

Итоги:

•Предпочтительным является метод прямого включения;

•Сортировка методом простого обмена является наихудшей;

•Быстрая сортировка превосходит все остальные методы сортировки;

Page 77: Методы сортировки  данных

77

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

? Что такое «сортировка»?? В чем заключается метод сортировки

отбором?? В чем заключается метод сортировки

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

сортировки?? В чем заключается метод быстрой

сортировки?? В чем заключается метод сортировки

Шелла?

Page 78: Методы сортировки  данных

78

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

? Какой алгоритм сортировки считается самым простым?

? Какой алгоритм сортировки считается самым эффективным?

? Сколько существует групп алгоритмов сортировки?

? По каким признакам характеризуются алгоритмы сортировки?

? Что нужно учитывать при выборе алгоритма сортировки?