Поразрядная сортировка

Содержание

Слайд 2

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

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

происходит сортировка, необходимо разделить на части, разряды ключа. Например, слово можно разделить по буквам, число - по цифрам...
До сортировки необходимо знать два параметра: k и m, где
k - количество разрядов в самом длинном ключе
m - разрядность данных: количество возможных значений разряда ключа
При сортировки чисел m = 10 (0.1 . . 9) , k = наибольшему количеству цифр в числах )
Эти параметры нельзя изменять в процессе работы алгоритма.
Слайд 3

Слайд 4

Слайд 5

Сортировка вставками Рассмотрим действия на i-м шаге алгоритма. Последовательность к этому

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

Рассмотрим действия на i-м шаге алгоритма. Последовательность к этому моменту

разделена на две части: готовую a[0]...a[i] и неупорядоченную a[i+1]...a[n].
На следующем, (i+1)-м каждом шаге алгоритма берем a[i+1] и вставляем на нужное место в готовую часть массива.
Поиск подходящего места для очередного элемента входной последовательности осуществляется путем последовательных сравнений с элементом, стоящим перед ним.
В зависимости от результата сравнения элемент либо остается на текущем месте(вставка завершена) либо они меняются местами и процесс повторяется.
Слайд 6

Сортировка вставками 0 1 4 3 2 7 9 0 1

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

0

1

4

3

2

7

9

0

1

4

3

2

7

9

0

1

2

3

4

7

9

0

1

2

3

4

7

9

0

1

3

2

4

7

9

0

1

3

2

4

7

9

сравнение

сравнение

сравнение

перемещение

перемещение

завершение шага

Слайд 7

В процессе вставки "просеиваем" элемент a[i] к началу массива, останавливаясь в

В процессе вставки "просеиваем" элемент a[i] к началу массива, останавливаясь в

случае, когда
1. Hайден элемент, меньший a[i],
2. Достигнуто начало последовательности.
Дополнительная память не используется.
Хорошим показателем сортировки является весьма естественное поведение: почти отсортированный массив будет досортирован очень быстро.
Метод устойчив.
Слайд 8

Сортировка Шелла Сортировка Шелла является модификацией алгоритма сортировки простыми вставками. Исходный

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

Сортировка Шелла является модификацией алгоритма сортировки простыми вставками.
Исходный массив
Объединение

парами
Сортировка внутри пар вставками

8

14

9

4

1

8

6

12

3

9

3

18

11

10

13

5

8

14

9

4

1

8

6

12

3

9

3

18

11

10

13

5

8

14

9

4

1

8

6

12

3

9

3

18

11

10

13

5

Слайд 9

Объединение «четвёрками» 5 11 3 4 1 8 3 12 6

Объединение «четвёрками»

5

11

3

4

1

8

3

12

6

9

9

18

14

10

13

8

Сортировка внутри «четвёрок» вставками

5

11

3

4

1

8

3

12

6

9

9

18

14

10

13

8

Слайд 10

Объединение «восьмерками» Сортировка внутри «восьмерок» вставками Объединение заключительное 3 1 5

Объединение «восьмерками»
Сортировка внутри «восьмерок» вставками
Объединение заключительное

3

1

5

12

10

6

3

4

8

9

9

18

11

14

13

8

3

1

5

12

10

6

3

4

8

9

9

18

11

14

13

8

3

4

5

10

11

6

3

1

8

9

9

14

13

18

12

8

Слайд 11

3 Сортировка вставками заключительная 3 4 5 10 11 6 3

3
Сортировка вставками заключительная

3

4

5

10

11

6

3

1

8

9

9

14

13

18

12

8

3

4

5

10

11

6

3

1

8

9

9

14

13

18

12

8

Слайд 12

Сортировка выбором Отсортированная последовательность создается путем присоединения к ней одного элемента

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

Отсортированная последовательность создается путем присоединения к ней одного элемента за

другим в правильном порядке.
Готовая последовательность строится, начиная с левого конца массива. Алгоритм состоит из n последовательных шагов, начиная от первого и заканчивая (n-1)-м.
На i-м шаге выбираем наименьший из элементов a[i] ... a[n] и меняем его местами с a[i].
Слайд 13

Шаг-1 (Исходная последовательность ) Нахождение минимального a[m1] элемента из последовательности a[1]

Шаг-1 (Исходная последовательность )
Нахождение минимального a[m1] элемента из последовательности a[1] ÷

a[n].
Меняем местами a[1] и a[m1].

4

9

7

6

2

3

4

9

7

6

2

3

4

9

7

6

2

3

Слайд 14

Шаг-2 Нахождение минимального a[m2] элемента из последовательности a[2] ÷ a[n]. Меняем

Шаг-2
Нахождение минимального a[m2] элемента из последовательности a[2] ÷ a[n].
Меняем местами a[2]

и a[m2].

2

9

7

6

4

3

2

9

7

6

4

3

2

9

7

6

4

3

Слайд 15

Шаг-3 Нахождение минимального a[m3] элемента из последовательности a[3] ÷ a[n]. Меняем

Шаг-3
Нахождение минимального a[m3] элемента из последовательности a[3] ÷ a[n].
Меняем местами a[3]

и a[m3].

2

3

7

6

4

9

2

3

7

6

4

9

2

3

7

6

4

9

Слайд 16

Шаг-4 Нахождение минимального a[m4] элемента из последовательности a[4] ÷ a[n]. Меняем

Шаг-4
Нахождение минимального a[m4] элемента из последовательности a[4] ÷ a[n].
Меняем местами a[4]

и a[m4]. (в данном случае элемент не смещается)

2

3

4

6

7

9

2

3

4

6

7

9

2

3

4

6

7

9

Слайд 17

Вне зависимости от номера текущего шага i, последовательность a[1]...a[i] является упорядоченной.

Вне зависимости от номера текущего шага i, последовательность a[1]...a[i] является упорядоченной.

Таким образом, на (n-1)-м шаге вся последовательность, кроме a[n] оказывается отсортированной, а a[n] стоит на последнем месте по праву: все меньшие элементы уже ушли влево.
Для нахождения наименьшего элемента из n рассматриваемых алгоритм совершает n сравнений. С учетом того, что количество рассматриваемых на очередном шаге элементов уменьшается на единицу, общее количество операций:
n + (n-1) + (n-2) + (n-3) + ... + 1 = 1/2 * ( n2+n )
Таким образом, так как число обменов всегда будет меньше числа сравнений, время сортировки растет квадратично относительно количества элементов.
Слайд 18

Алгоритм не использует дополнительной памяти: все операции происходят "на месте". Метод

Алгоритм не использует дополнительной памяти: все операции происходят "на месте".
Метод

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

Сортировка пузырьком Расположим массив сверху вниз, от нулевого элемента - к

  Сортировка пузырьком

Расположим массив сверху вниз, от нулевого элемента - к

последнему.
Идея метода: шаг сортировки состоит в проходе снизу вверх по массиву. По пути просматриваются пары соседних элементов. Если элементы некоторой пары находятся в неправильном порядке, то меняем их местами.
Слайд 20

Нулевой проход Нет обмена 2 6 2 7 2 9 2

Нулевой проход
Нет
обмена 2 6 2 7 2 9 2

4

4

9

7

6

2

3

4

9

7

2

6

3

4

9

2

7

6

3

4

2

9

7

6

3

Слайд 21

После нулевого прохода по массиву "вверху" оказывается самый "легкий" элемент -

После нулевого прохода по массиву "вверху" оказывается самый "легкий" элемент -

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

Номер прохода i=0 i=1 i=2 i=3 i=4 i=5 2 4 9


Номер
прохода i=0 i=1 i=2 i=3 i=4 i=5

2

4

9

7

6

3

2

3

4

9

7

6

2

3

4

9

7

6

2

3

4

6

9

7

2

3

4

6

7

9

Слайд 23

Дополнительная памятьне требуется. Поведение усовершенствованного (но не начального) метода довольно естественное,

Дополнительная памятьне требуется.
Поведение усовершенствованного (но не начального) метода довольно естественное,

почти отсортированный массив будет отсортирован намного быстрее случайного.
Сортировка пузырьком устойчива, однако шейкер-сортировка утрачивает это качество.
Слайд 24

Шейкер-сортировка Улучшение алгоритма можно получить из следующего наблюдения. Легкий пузырек снизу

Шейкер-сортировка

Улучшение алгоритма можно получить из следующего наблюдения. Легкий пузырек снизу

поднимется наверх за один проход, тяжелые пузырьки опускаются со минимальной скоростью: один шаг за итерацию.
Чтобы избежать подобного эффекта, можно менять направление следующих один за другим проходов. Получившийся алгоритм иногда называют "шейкер-сортировкой".
Слайд 25

2 4 9 7 6 3 9 3 6 7 4

2

4

9

7

6

3

9

3

6

7

4

2

Номер
прохода i=0 i=1 i=2 i=3 i=4 i=5