Upgrade to Pro — share decks privately, control downloads, hide ads and more …

№ 3. Сортировки: квази-линейные, линейные

B1196c22fd3ca181eec43e1b67823d3f?s=47 ОПК
February 22, 2021

№ 3. Сортировки: квази-линейные, линейные

1. Cортировка Шелла.
2. Быстрая сортировка. Процедура разделения массива.
3. Алгоритм выбора k-го элемента.
4. Стабильность сортировок.
5. Сортировка слиянием.
6. Пирамидальная сортировка.
7. Нижняя оценка скорости сортировок, основанных на сравнениях.
8. Линейные сортировки: подсчетом, поразрядная, карманная.

B1196c22fd3ca181eec43e1b67823d3f?s=128

ОПК

February 22, 2021
Tweet

Transcript

  1. ОСНОВЫ ПРОГРАММНОГО КОНСТРУИРОВАНИЯ Лекция № 3 22 февраля 2021 г.

    youtube.com/user/AlgoRythmics
  2. СОРТИРОВКА ШЕЛЛА 1. Выбираем длину промежутка 1 ≤ d <

    N. 2. Разбиваем массив на d подмассивов: [1, 1+d, 1+2d, …], [2, 2+d, 2+2d, …], …, [d-1, 2d-1, 3d-1, …]. 3. Каждый подмассив сортируем сортировкой вставками. 4. Если d > 1, то уменьшаем d и переходим на шаг 2. Иначе массив отсортирован.
  3. 37 5 10 12 9 15 23 8 22 32

    1 12 15 СОРТИРОВКА ШЕЛЛА 37 5 10 12 9 15 23 8 22 32 1 12 15 37 5 10 12 9 15 23 8 22 32 1 12 15 9 5 10 12 15 15 23 8 22 32 1 12 37 9 5 10 12 15 15 23 8 22 32 1 12 37 9 5 10 12 15 15 23 8 22 32 1 12 37 9 5 10 12 15 15 23 8 22 32 1 12 37 9 5 1 12 15 15 10 8 22 32 23 12 37 9 5 1 12 15 15 10 8 22 32 23 12 37 9 5 1 8 15 15 10 12 22 32 23 12 37 9 5 1 8 15 15 10 12 22 32 23 12 37
  4. СОРТИРОВКА ШЕЛЛА 9 5 1 8 15 15 10 12

    22 32 23 12 37 9 5 1 8 15 15 10 12 22 32 23 12 37 9 5 1 8 15 15 10 12 22 32 23 12 37 1 5 9 8 10 15 15 12 22 32 23 12 37 1 5 9 8 10 15 15 12 22 32 23 12 37 1 5 9 8 10 12 15 12 22 15 23 32 37 1 5 9 8 10 12 15 12 22 15 23 32 37
  5. СОРТИРОВКА ШЕЛЛА 1 5 9 8 10 12 15 12

    22 15 23 32 37 1 5 9 8 10 12 15 12 22 15 23 32 37 1 5 9 8 10 12 15 12 22 15 23 32 37 1 5 8 9 10 12 12 15 15 22 23 32 37 1 5 8 9 10 12 12 15 15 22 23 32 37
  6. АНИМАЦИЯ http://sorting-algorithms.com/shell-sort

  7. АНАЛИЗ СОРТИРОВКИ ШЕЛЛА Быстродействие зависит от выбора длин промежутков. •

    Шелл: [N/2, N/4, N/8, …, 1] 㱺 O(N2), • Хиббард: (2i – 1), […, 15, 7, 3, 1] 㱺 O(N3/2), • Пратт: 2p3q, […, 9, 8, 6, 4, 3, 2, 1] 㱺 O(N (log N)2), • Седжвик: нетривиальные последовательности 㱺 O(N4/3).
  8. «РАЗДЕЛЯЙ И ВЛАСТВУЙ» • Разделение задачи на несколько подзадач. •

    Покорение: решение подзадач. • Комбинирование решения исходной задачи из решений подзадач.
  9. БЫСТРАЯ СОРТИРОВКА (QUICKSORT) • Разделение. Массив путем переупорядочения элементов разбивается

    на две части [R1, …, Rq−1] и [Rq+1, …, RN]. При этом запись Rq «стоит на своем месте», т.е. все ключи левой части не больше Kq, а все ключи правой части – не меньше. • Покорение. Процедура Quicksort вызывается рекурсивно для левой и правой частей. • Комбинирование. Не требуется.
  10. ПРОЦЕДУРА РАЗДЕЛЕНИЯ 4 3 8 2 7 6 5 0

    1 9
  11. ПРОЦЕДУРА РАЗДЕЛЕНИЯ 4 3 8 2 7 6 5 0

    1 9
  12. ПРОЦЕДУРА РАЗДЕЛЕНИЯ 4 3 1 2 7 6 5 0

    8 9
  13. ПРОЦЕДУРА РАЗДЕЛЕНИЯ 4 3 1 2 7 6 5 0

    8 9
  14. ПРОЦЕДУРА РАЗДЕЛЕНИЯ 4 3 1 2 0 6 5 7

    8 9
  15. ПРОЦЕДУРА РАЗДЕЛЕНИЯ 4 3 1 2 0 6 5 7

    8 9
  16. ПРОЦЕДУРА РАЗДЕЛЕНИЯ 4 3 1 2 0 6 5 7

    8 9
  17. ПРОЦЕДУРА РАЗДЕЛЕНИЯ 4 3 1 2 0 6 5 7

    8 9
  18. ПРОЦЕДУРА РАЗДЕЛЕНИЯ 4 3 1 2 0 6 5 7

    8 9
  19. ПРОЦЕДУРА РАЗДЕЛЕНИЯ 4 3 1 2 0 6 5 7

    8 9
  20. ПРОЦЕДУРА РАЗДЕЛЕНИЯ 4 3 1 2 0 6 5 7

    8 9
  21. ПРОЦЕДУРА РАЗДЕЛЕНИЯ 0 3 1 2 4 6 5 7

    8 9
  22. ПРОЦЕДУРА РАЗДЕЛЕНИЯ 0 3 1 2 4 6 5 7

    8 9
  23. ПРОЦЕДУРА РАЗДЕЛЕНИЯ • Выбираем разделяющий элемент (K1). Он в конце

    станет Kq. • Два указателя: i = 2 и j = N. 1. Увеличиваем i, пока не найдем Ki ≥ K1. 2. Уменьшаем j, пока не найдем Kj ≤ K1. 3. Если i < j, меняем местами Ri и Rj, увеличиваем i, уменьшаем j и продолжаем просмотр (пока не станет i ≥ j). • Меняем местами Rj и R1. i j 1 2 N ключи ≤ K1 ключи ≥ K1
  24. ПРОЦЕДУРА РАЗДЕЛЕНИЯ И РАВНЫЕ ЭЛЕМЕНТЫ 4 4 4 4 4

  25. ПРОЦЕДУРА РАЗДЕЛЕНИЯ И РАВНЫЕ ЭЛЕМЕНТЫ 4 4 4 4 4

  26. ПРОЦЕДУРА РАЗДЕЛЕНИЯ И РАВНЫЕ ЭЛЕМЕНТЫ 4 4 4 4 4

  27. ПРОЦЕДУРА РАЗДЕЛЕНИЯ И РАВНЫЕ ЭЛЕМЕНТЫ 4 4 4 4 4

  28. ПРОЦЕДУРА РАЗДЕЛЕНИЯ И РАВНЫЕ ЭЛЕМЕНТЫ 4 4 4 4 4

  29. ПРОЦЕДУРА РАЗДЕЛЕНИЯ И РАВНЫЕ ЭЛЕМЕНТЫ 4 4 4 4 4

  30. ПРОЦЕДУРА РАЗДЕЛЕНИЯ И РАВНЫЕ ЭЛЕМЕНТЫ 4 4 4 4 4

    4 4 4 4 4 Если не переставлять элементы, равные разделяющему, то массив одинаковых элементов разделится "плохо":
  31. АНИМАЦИЯ http://www.sorting-algorithms.com/quick-sort

  32. ОСНОВНАЯ ТЕОРЕМА О РЕКУРРЕНТНЫХ СООТНОШЕНИЯХ (THE MASTER METHOD) Пусть T(n)

    = a T(n/b) + O(nd), a ≥ 1, b ≥ 2, d ≥ 0 количество подзадач размер каждой подзадачи сложность разделения и объединения T(n) = O(nd log n), T(n) = O(nd), T(n) = O(nlog a / log b), если a = bd если a < bd если a > bd
  33. БЫСТРОДЕЙСТВИЕ QUICKSORT • Удачный разделяющий элемент: • T(N) = 2

    T(N/2) + O(N) = O(N log N), • В худшем случае: • T(N) = O(N2).
  34. ВЫБОР РАЗДЕЛЯЮЩЕГО ЭЛЕМЕНТА • Как выбирать? • Выбирать случайный элемент.

    • Или перед сортировкой можно перемешать весь массив (например, тасованием Фишера–Йетса). • Выбрать медиану малого подмассива (например, из первого, последнего и серединного элементов). • Но в худшем случае все-равно O(N2).
  35. АЛГОРИТМ ВЫБОРА • Задача состоит в поиске k-го по величине

    элемента в массиве. • Для k = 1, k = N, задача решает очевидно за O(N). • Можно отсортировать и взять k-ый: в среднем O(N log N). • Можно ли за O(N)?
  36. ЛИНЕЙНЫЙ АЛГОРИТМ ВЫБОРА • Разделение. Разделяем массив аналогично быстрой сортировке.

    • Покорение. Если k < q, то продолжаем выбор k-го в левой половине. Если k > q, то продолжаем выбор (k-q)-го в правой половине. Если k = q, то заканчиваем алгоритм. • Комбинирование. Не требуется.
  37. ОСНОВНАЯ ТЕОРЕМА О РЕКУРРЕНТНЫХ СООТНОШЕНИЯХ (THE MASTER METHOD) Пусть T(n)

    = a T(n/b) + O(nd), a ≥ 1, b ≥ 2, d ≥ 0 количество подзадач размер каждой подзадачи сложность разделения и объединения T(n) = O(nd log n), T(n) = O(nd), T(n) = O(nlog a / log b), если a = bd если a < bd если a > bd
  38. СЛОЖНОСТЬ ЛИНЕЙНОГО АЛГОРИТМА ВЫБОРА • В среднем O(N), в худшем

    случае O(N2). • Все проблемы аналогичны проблемам быстрой сортировки. • Существует алгоритм BFPRT работающий за O(N) в худшем случае.
  39. ПРОБЛЕМА СТАБИЛЬНОСТИ • Неотсортированный массив по возрасту: [Вася – 17

    лет, Коля – 18 лет, Петя – 16 лет, Юля – 17 лет] • Стабильная сортировка по возрасту: [Петя – 16 лет, Вася – 17 лет, Юля – 17 лет, Коля – 18 лет] • Нестабильная сортировка по возрасту: [Петя – 16 лет, Юля – 17 лет, Вася – 17 лет, Коля – 18 лет]
  40. СТАБИЛЬНЫЕ СОРТИРОВКИ В ТАБЛИЦАХ

  41. СТАБИЛЬНОСТЬ СОРТИРОВОК • Стабильная сортировка не меняет относительный порядок элементов

    с равными ключами. • Стабильные: выбором, пузырьковая, вставками. • Нестабильные: bozosort, bogosort, Шелла, быстрая.
  42. СОРТИРОВКА СЛИЯНИЕМ (MERGESORT) • Разделение. Как-либо образом делим массив на

    2 равные части. • Покорение. Для каждой из частей размером больше 1 алгоритм вызывается рекурсивно. • Комбинирование. Линейное слияние отсортированных подмассивов.
  43. СОРТИРОВКА СЛИЯНИЕМ (MERGESORT) 5 7 9 8 2 7 3

    1 4
  44. СОРТИРОВКА СЛИЯНИЕМ (MERGESORT) 5 7 9 8 2 7 3

    1 4 5 7 9 8 2 7 3 1 4
  45. СОРТИРОВКА СЛИЯНИЕМ (MERGESORT) 2 5 7 8 9 1 3

    4 7 5 7 9 8 2 7 3 1 4 5 7 9 8 2 7 3 1 4
  46. СОРТИРОВКА СЛИЯНИЕМ (MERGESORT) 2 5 7 8 9 – 1

    3 4 7 –
  47. СОРТИРОВКА СЛИЯНИЕМ (MERGESORT) 2 5 7 8 9 – 1

    3 4 7 –
  48. СОРТИРОВКА СЛИЯНИЕМ (MERGESORT) 2 5 7 8 9 – 1

    3 4 7 – 1
  49. СОРТИРОВКА СЛИЯНИЕМ (MERGESORT) 2 5 7 8 9 – 1

    3 4 7 – 1
  50. СОРТИРОВКА СЛИЯНИЕМ (MERGESORT) 2 5 7 8 9 – 1

    3 4 7 – 1 2
  51. СОРТИРОВКА СЛИЯНИЕМ (MERGESORT) 2 5 7 8 9 – 1

    3 4 7 – 1 2
  52. СОРТИРОВКА СЛИЯНИЕМ (MERGESORT) 2 5 7 8 9 – 1

    3 4 7 – 1 2 3
  53. СОРТИРОВКА СЛИЯНИЕМ (MERGESORT) 2 5 7 8 9 – 1

    3 4 7 – 1 2 3
  54. СОРТИРОВКА СЛИЯНИЕМ (MERGESORT) 2 5 7 8 9 – 1

    3 4 7 – 1 2 3 4
  55. СОРТИРОВКА СЛИЯНИЕМ (MERGESORT) 2 5 7 8 9 – 1

    3 4 7 – 1 2 3 4
  56. СОРТИРОВКА СЛИЯНИЕМ (MERGESORT) 2 5 7 8 9 – 1

    3 4 7 – 1 2 3 4 5
  57. СОРТИРОВКА СЛИЯНИЕМ (MERGESORT) 2 5 7 8 9 – 1

    3 4 7 – 1 2 3 4 5
  58. СОРТИРОВКА СЛИЯНИЕМ (MERGESORT) 2 5 7 8 9 – 1

    3 4 7 – 1 2 3 4 5 7
  59. СОРТИРОВКА СЛИЯНИЕМ (MERGESORT) 2 5 7 8 9 – 1

    3 4 7 – 1 2 3 4 5 7
  60. СОРТИРОВКА СЛИЯНИЕМ (MERGESORT) 2 5 7 8 9 – 1

    3 4 7 – 1 2 3 4 5 7 7
  61. СОРТИРОВКА СЛИЯНИЕМ (MERGESORT) 2 5 7 8 9 – 1

    3 4 7 – 1 2 3 4 5 7 7
  62. СОРТИРОВКА СЛИЯНИЕМ (MERGESORT) 2 5 7 8 9 – 1

    3 4 7 – 1 2 3 4 5 7 7
  63. СОРТИРОВКА СЛИЯНИЕМ (MERGESORT) 2 5 7 8 9 – 1

    3 4 7 – 1 2 3 4 5 7 7 8 9
  64. СОРТИРОВКА СЛИЯНИЕМ (MERGESORT) 2 5 7 8 9 – 1

    3 4 7 – 1 2 3 4 5 7 7 8 9
  65. СОРТИРОВКА СЛИЯНИЕМ (MERGESORT) Линейный алгоритм слияния 2 отсортированных массивов: •

    Заводим 2 индекса, изначально указывающих на начала массивов. • На каждом шаге выбираем наименьший элемент из двух, на которые указывают индексы, записываем его в результирующий массив и сдвигаем этот индекс. При равенстве элементов, берем из первого. • Когда кончился один из массивов, переписываем все оставшиеся элементы в результирующий массив. Результирующий массив отсортирован.
  66. АНАЛИЗ СОРТИРОВКИ СЛИЯНИЕМ • Сложность в худшем случае O(N log N).

    • Требуется дополнительная память (еще один массив размером N). • Осуществляет доступ к сортируемым элементам последовательно. Поэтому годится для сортировки связанных списков. • Является стабильной.
  67. АНИМАЦИЯ http://www.sorting-algorithms.com/merge-sort

  68. ПИРАМИДАЛЬНАЯ СОРТИРОВКА (HEAPSORT) • Пирамида – массив, в котором для

    каждого элемента n выполнено: • Kn ≥ K2n (если 2n ≤ N). • Kn ≥ K2n+1 (если 2n+1 ≤ N). • Пример: 16, 14, 10, 8, 7, 9, 3, 2, 4, 1. • Алгоритм сортировки: • Из массива делаем пирамиду (перестановками). • Из пирамиды делаем отсортированный массив (перестановками). 16 14 8 2 4 7 1 10 9 3 Рис. 13. Неубывающая пирамида для массива чисе 4 1 3
  69. УТОПЛЕНИЕ ЭЛЕМЕНТА (SINK) Если элемент Kn не удовлетворяет условиям пирамиды:

    • Находим X = max(K2n, K2n+1). • Меняем местами Kn и X. • При необходимости повторяем процедуру для нового положения Kn. Если для всех узлов Km, m > n, пирамида корректна, то для Kn тоже. 5 6 8 8 6 5
  70. 1. ПОСТРОЕНИЕ ПИРАМИДЫ 4 1 3 2 16 9 10

    14 8 7 4 1 7 3 2 9 16 10 8 14
  71. 1. ПОСТРОЕНИЕ ПИРАМИДЫ 4 1 3 2 16 9 10

    14 8 7 4 1 7 3 2 9 16 10 8 14
  72. 1. ПОСТРОЕНИЕ ПИРАМИДЫ 4 1 3 2 16 9 10

    14 8 7 4 1 7 3 2 9 16 10 8 14
  73. 1. ПОСТРОЕНИЕ ПИРАМИДЫ 4 1 3 2 16 9 10

    14 8 7 4 1 7 3 2 9 16 10 8 14
  74. 1. ПОСТРОЕНИЕ ПИРАМИДЫ 4 1 3 2 16 9 10

    14 8 7 4 1 7 3 2 9 16 10 8 14
  75. 1. ПОСТРОЕНИЕ ПИРАМИДЫ 4 1 3 14 16 9 10

    2 8 7 4 1 7 3 14 9 16 10 8 2
  76. 1. ПОСТРОЕНИЕ ПИРАМИДЫ 4 1 3 14 16 9 10

    2 8 7 4 1 7 3 14 9 16 10 8 2
  77. 1. ПОСТРОЕНИЕ ПИРАМИДЫ 4 1 3 14 16 9 10

    2 8 7 4 1 7 3 14 9 16 10 8 2
  78. 1. ПОСТРОЕНИЕ ПИРАМИДЫ 4 1 3 14 16 9 10

    2 8 7 4 1 7 3 14 9 16 10 8 2
  79. 1. ПОСТРОЕНИЕ ПИРАМИДЫ 4 1 10 14 16 9 3

    2 8 7 4 1 7 10 14 9 16 3 8 2
  80. 1. ПОСТРОЕНИЕ ПИРАМИДЫ 4 1 10 14 16 9 3

    2 8 7 4 1 7 10 14 9 16 3 8 2
  81. 1. ПОСТРОЕНИЕ ПИРАМИДЫ 4 1 10 14 16 9 3

    2 8 7 4 1 7 10 14 9 16 3 8 2
  82. 1. ПОСТРОЕНИЕ ПИРАМИДЫ 4 1 10 14 16 9 3

    2 8 7 4 1 7 10 14 9 16 3 8 2
  83. 1. ПОСТРОЕНИЕ ПИРАМИДЫ 4 16 10 14 1 9 3

    2 8 7 4 16 7 10 14 9 1 3 8 2
  84. 1. ПОСТРОЕНИЕ ПИРАМИДЫ 4 16 10 14 1 9 3

    2 8 7 4 16 7 10 14 9 1 3 8 2
  85. 1. ПОСТРОЕНИЕ ПИРАМИДЫ 4 16 10 14 7 9 3

    2 8 1 4 16 1 10 14 9 7 3 8 2
  86. 1. ПОСТРОЕНИЕ ПИРАМИДЫ 4 16 10 14 7 9 3

    2 8 1 4 16 1 10 14 9 7 3 8 2
  87. 1. ПОСТРОЕНИЕ ПИРАМИДЫ 4 16 10 14 7 9 3

    2 8 1 4 16 1 10 14 9 7 3 8 2
  88. 1. ПОСТРОЕНИЕ ПИРАМИДЫ 4 16 10 14 7 9 3

    2 8 1 4 16 1 10 14 9 7 3 8 2
  89. 1. ПОСТРОЕНИЕ ПИРАМИДЫ 16 4 10 14 7 9 3

    2 8 1 16 4 1 10 14 9 7 3 8 2
  90. 1. ПОСТРОЕНИЕ ПИРАМИДЫ 16 4 10 14 7 9 3

    2 8 1 16 4 1 10 14 9 7 3 8 2
  91. 1. ПОСТРОЕНИЕ ПИРАМИДЫ 16 14 10 4 7 9 3

    2 8 1 16 14 1 10 4 9 7 3 8 2
  92. 1. ПОСТРОЕНИЕ ПИРАМИДЫ 16 14 10 4 7 9 3

    2 8 1 16 14 1 10 4 9 7 3 8 2
  93. 1. ПОСТРОЕНИЕ ПИРАМИДЫ 16 14 10 8 7 9 3

    2 4 1 16 14 1 10 8 9 7 3 4 2
  94. 1. ПОСТРОЕНИЕ ПИРАМИДЫ 16 14 10 8 7 9 3

    2 4 1 16 14 1 10 8 9 7 3 4 2
  95. 1. ПОСТРОЕНИЕ ПИРАМИДЫ 16 14 10 8 7 9 3

    2 4 1 16 14 1 10 8 9 7 3 4 2
  96. 1. ПОСТРОЕНИЕ ПИРАМИДЫ 16 14 10 8 7 9 3

    2 4 1 16 14 1 10 8 9 7 3 4 2
  97. 1. ПОСТРОЕНИЕ ПИРАМИДЫ • Идем с конца массива и топим

    элементы. • Вторая половина массива изначально удовлетворяет условию пирамиды. 16 14 8 2 4 7 1 10 9 3 . 13. Неубывающая пирамида для массива чисел (8.10) 4 1 2 14 8 16 7 3 9 10 Рис. 14. Двоичное дерево из массива чисел (8.11) 16 14 8 2 4 7 1 10 9 3 Рис. 13. Неубывающая пирамида для массива чисел (8.
  98. 2. ПОЛУЧЕНИЕ МАССИВА 16 14 10 8 7 9 3

    2 4 1 16 14 1 10 8 9 7 3 4 2
  99. 2. ПОЛУЧЕНИЕ МАССИВА 16 14 10 8 7 9 3

    2 4 1 16 14 1 10 8 9 7 3 4 2
  100. 2. ПОЛУЧЕНИЕ МАССИВА 1 14 10 8 7 9 3

    2 4 16 1 14 10 8 9 7 3 4 2
  101. 2. ПОЛУЧЕНИЕ МАССИВА 1 14 10 8 7 9 3

    2 4 16 1 14 10 8 9 7 3 4 2
  102. 2. ПОЛУЧЕНИЕ МАССИВА 14 1 10 8 7 9 3

    2 4 16 14 1 10 8 9 7 3 4 2
  103. 2. ПОЛУЧЕНИЕ МАССИВА 14 1 10 8 7 9 3

    2 4 16 14 1 10 8 9 7 3 4 2
  104. 2. ПОЛУЧЕНИЕ МАССИВА 14 8 10 1 7 9 3

    2 4 16 14 8 10 1 9 7 3 4 2
  105. 2. ПОЛУЧЕНИЕ МАССИВА 14 8 10 1 7 9 3

    2 4 16 14 8 10 1 9 7 3 4 2
  106. 2. ПОЛУЧЕНИЕ МАССИВА 14 8 10 4 7 9 3

    2 1 16 14 8 10 4 9 7 3 1 2
  107. 2. ПОЛУЧЕНИЕ МАССИВА 14 8 10 4 7 9 3

    2 1 16 14 8 10 4 9 7 3 1 2
  108. 2. ПОЛУЧЕНИЕ МАССИВА 14 8 10 4 7 9 3

    2 1 16 14 8 10 4 9 7 3 1 2
  109. 2. ПОЛУЧЕНИЕ МАССИВА 14 8 10 4 7 9 3

    2 1 16 14 8 10 4 9 7 3 1 2
  110. 2. ПОЛУЧЕНИЕ МАССИВА 1 8 10 4 7 9 3

    2 14 16 1 8 10 4 9 7 3 2
  111. 2. ПОЛУЧЕНИЕ МАССИВА 10 8 1 4 7 9 3

    2 14 16 10 8 1 4 9 7 3 2
  112. 2. ПОЛУЧЕНИЕ МАССИВА 10 8 9 4 7 1 3

    2 14 16 10 8 9 4 1 7 3 2
  113. 2. ПОЛУЧЕНИЕ МАССИВА 10 8 9 4 7 1 3

    2 14 16 10 8 9 4 1 7 3 2
  114. 2. ПОЛУЧЕНИЕ МАССИВА 10 8 9 4 7 1 3

    2 14 16 10 8 9 4 1 7 3 2
  115. 2. ПОЛУЧЕНИЕ МАССИВА 2 8 9 4 7 1 3

    10 14 16 2 8 9 4 1 7 3
  116. 2. ПОЛУЧЕНИЕ МАССИВА 9 8 2 4 7 1 3

    10 14 16 9 8 2 4 1 7 3
  117. 2. ПОЛУЧЕНИЕ МАССИВА 9 8 3 4 7 1 2

    10 14 16 9 8 3 4 1 7 2
  118. 2. ПОЛУЧЕНИЕ МАССИВА 9 8 3 4 7 1 2

    10 14 16 9 8 3 4 1 7 2
  119. 2. ПОЛУЧЕНИЕ МАССИВА 9 8 3 4 7 1 2

    10 14 16 9 8 3 4 1 7 2
  120. 2. ПОЛУЧЕНИЕ МАССИВА 2 8 3 4 7 1 9

    10 14 16 2 8 3 4 1 7
  121. 2. ПОЛУЧЕНИЕ МАССИВА 8 2 3 4 7 1 9

    10 14 16 8 2 3 4 1 7
  122. 2. ПОЛУЧЕНИЕ МАССИВА 8 7 3 4 2 1 9

    10 14 16 8 7 3 4 1 2
  123. 2. ПОЛУЧЕНИЕ МАССИВА 8 7 3 4 2 1 9

    10 14 16 8 7 3 4 1 2
  124. 2. ПОЛУЧЕНИЕ МАССИВА 8 7 3 4 2 1 9

    10 14 16 8 7 3 4 1 2
  125. 2. ПОЛУЧЕНИЕ МАССИВА 1 7 3 4 2 8 9

    10 14 16 1 7 3 4 2
  126. 2. ПОЛУЧЕНИЕ МАССИВА 7 4 3 1 2 8 9

    10 14 16 7 4 3 1 2
  127. 2. ПОЛУЧЕНИЕ МАССИВА 7 4 3 1 2 8 9

    10 14 16 7 4 3 1 2
  128. 2. ПОЛУЧЕНИЕ МАССИВА 2 4 3 1 7 8 9

    10 14 16 2 4 3 1
  129. 2. ПОЛУЧЕНИЕ МАССИВА 4 2 3 1 7 8 9

    10 14 16 4 2 3 1
  130. 2. ПОЛУЧЕНИЕ МАССИВА 3 2 1 4 7 8 9

    10 14 16 3 2 1
  131. 2. ПОЛУЧЕНИЕ МАССИВА 2 1 3 4 7 8 9

    10 14 16 2 1
  132. 2. ПОЛУЧЕНИЕ МАССИВА 1 2 3 4 7 8 9

    10 14 16 1
  133. 2. ПОЛУЧЕНИЕ МАССИВА 1 2 3 4 7 8 9

    10 14 16
  134. 2. ПОЛУЧЕНИЕ МАССИВА • По условию пирамиды наибольший элемент находится

    на первом месте. Меняем его местами с последним (где он должен быть), укорачиваем пирамиду на 1 и восстанавливаем ее, утопляя элемент, оказавшийся на вершине. • Повторяем процесс, пока в пирамиде не останется один элемент. 16 14 8 2 4 7 1 10 9 3
  135. АНИМАЦИЯ http://www.sorting-algorithms.com/heap-sort

  136. АНАЛИЗ ПИРАМИДАЛЬНОЙ СОРТИРОВКИ • Утопляем элемент в худшем случае за

    O(log N). • Для построения пирамиды утопляем N/2 элементов. • Для получения отсортированного массива N раз утопляем вершину. • Итого: O(N log N) в худшем случае.
  137. СОРТИРОВКИ СРАВНЕНИЯМИ Сортировка, основанная на сравнениях – сортировка, оперирующая сравнением

    двух элементов и их перестановкой. Может ли такая сортировка в худшем случае работать быстрее, чем за O(N log N)? Нет, время работы в худшем случае любой сортировки, основанной на сравнениях: Ω(N log N).
  138. Ω(N LOG N) • Зафиксируем некоторую сортировку и входной массив длины

    N, содержащий числа 1, 2, … N в некотором порядке. • Вариантов входного массива N!. • Предположим, что сортировка во время своей работы делает ≤ k операций сравнений. • Значит, у алгоритма возможно максимум 2k различных путей исполнения.
  139. Ω(N LOG N) Так как алгоритм корректно сортирует все входные массивы

    за k сравнений, то 2k должно быть не меньше N!. 2k ≥ N! N! ≈ (2πN)½(N/e)N (формула Стирлинга) k = Ω(½ log N + N(log N - log e)) = Ω(N log N)
  140. ИНТЕРВЬЮ БАРАКА ОБАМЫ В GOOGLE Eric Schmidt: What is the

    most efficient way to sort a million 32-bit integers? Barack Obama: Well... Eric Schmidt: Maybe–I'm sorry... Barack Obama: No, no, no, no. I think–I think the bubble sort would be the wrong way to go.
  141. СОРТИРОВКА ЗА ЛИНЕЙНОЕ ВРЕМЯ • Для произвольных ключей доказали: количество

    сравнений не менее N log N. • А что, если ключи не произвольные? • Сколько операций нужно, чтобы отсортировать последовательность битов? 0 1 0 0 1 0 1 0 1 0 0 0 0 0 1 1 0 0 1 0 1 1 1 0 0 1 0 0 1 1 1 1
  142. СОРТИРОВКА ПОДСЧЕТОМ (COUNTING SORT) • Предположим, что все ключи –

    целые числа 0…K−1. • Заведем массив счетчиков C[k] размером K, изначально заполненный нулями. • Подсчитаем количество вхождений каждого ключа. • Добавим к каждому элементу C[k] все предыдущие, получая: C[k] = количество ключей, не превышающих k. • Идем с конца массива элементов, ставя элемент A[n] на позицию C[Key(A[n])]−1 и уменьшая счетчик.
  143. СОРТИРОВКА ПОДСЧЕТОМ (COUNTING SORT) 3 2 3 3 1 3

    1 1 2 2
  144. СОРТИРОВКА ПОДСЧЕТОМ (COUNTING SORT) 3 2 3 3 1 3

    1 1 2 2 C[] 1 2 3 0 0 0
  145. СОРТИРОВКА ПОДСЧЕТОМ (COUNTING SORT) 3 2 3 3 1 3

    1 1 2 2 C[] 1 2 3 3 3 4 Подсчитали количество элементов.
  146. СОРТИРОВКА ПОДСЧЕТОМ (COUNTING SORT) 3 2 3 3 1 3

    1 1 2 2 C[] 1 2 3 3 6 10 Прибавили все предыдущие.
  147. СОРТИРОВКА ПОДСЧЕТОМ (COUNTING SORT) 3 2 3 3 1 3

    1 1 2 2 C[] 1 2 3 3 6 10 1 2 3 4 5 6 7 8 9 10
  148. СОРТИРОВКА ПОДСЧЕТОМ (COUNTING SORT) 3 2 3 3 1 3

    1 1 2 2 C[] 1 2 3 3 6 10 1 2 3 4 5 6 7 8 9 10
  149. СОРТИРОВКА ПОДСЧЕТОМ (COUNTING SORT) 3 2 3 3 1 3

    1 1 2 2 C[] 1 2 3 3 6 10 1 2 3 4 5 6 7 8 9 10
  150. СОРТИРОВКА ПОДСЧЕТОМ (COUNTING SORT) 3 2 3 3 1 3

    1 1 2 2 C[] 1 2 3 3 6 10 1 2 3 4 5 6 7 8 9 10
  151. СОРТИРОВКА ПОДСЧЕТОМ (COUNTING SORT) 3 2 3 3 1 3

    1 1 2 2 C[] 1 2 3 3 6 10 2 1 2 3 4 5 6 7 8 9 10
  152. СОРТИРОВКА ПОДСЧЕТОМ (COUNTING SORT) 3 2 3 3 1 3

    1 1 2 2 C[] 1 2 3 3 5 10 2 1 2 3 4 5 6 7 8 9 10
  153. СОРТИРОВКА ПОДСЧЕТОМ (COUNTING SORT) 3 2 3 3 1 3

    1 1 2 2 C[] 1 2 3 3 5 10 2 1 2 3 4 5 6 7 8 9 10
  154. СОРТИРОВКА ПОДСЧЕТОМ (COUNTING SORT) 3 2 3 3 1 3

    1 1 2 2 C[] 1 2 3 3 5 10 2 1 2 3 4 5 6 7 8 9 10
  155. СОРТИРОВКА ПОДСЧЕТОМ (COUNTING SORT) 3 2 3 3 1 3

    1 1 2 2 C[] 1 2 3 3 5 10 2 1 2 3 4 5 6 7 8 9 10
  156. СОРТИРОВКА ПОДСЧЕТОМ (COUNTING SORT) 3 2 3 3 1 3

    1 1 2 2 C[] 1 2 3 3 5 10 2 2 1 2 3 4 5 6 7 8 9 10
  157. СОРТИРОВКА ПОДСЧЕТОМ (COUNTING SORT) 3 2 3 3 1 3

    1 1 2 2 C[] 1 2 3 3 4 10 2 2 1 2 3 4 5 6 7 8 9 10
  158. СОРТИРОВКА ПОДСЧЕТОМ (COUNTING SORT) 3 2 3 3 1 3

    1 1 2 2 C[] 1 2 3 3 4 10 2 2 1 2 3 4 5 6 7 8 9 10
  159. СОРТИРОВКА ПОДСЧЕТОМ (COUNTING SORT) 3 2 3 3 1 3

    1 1 2 2 C[] 1 2 3 2 4 10 1 2 2 1 2 3 4 5 6 7 8 9 10
  160. СОРТИРОВКА ПОДСЧЕТОМ (COUNTING SORT) 3 2 3 3 1 3

    1 1 2 2 C[] 1 2 3 2 4 10 1 2 2 1 2 3 4 5 6 7 8 9 10
  161. СОРТИРОВКА ПОДСЧЕТОМ (COUNTING SORT) 3 2 3 3 1 3

    1 1 2 2 C[] 1 2 3 1 4 10 1 1 2 2 1 2 3 4 5 6 7 8 9 10
  162. СОРТИРОВКА ПОДСЧЕТОМ (COUNTING SORT) 3 2 3 3 1 3

    1 1 2 2 C[] 1 2 3 1 4 9 1 1 2 2 3 1 2 3 4 5 6 7 8 9 10
  163. СОРТИРОВКА ПОДСЧЕТОМ (COUNTING SORT) 3 2 3 3 1 3

    1 1 2 2 C[] 1 2 3 0 4 9 1 1 1 2 2 3 1 2 3 4 5 6 7 8 9 10
  164. СОРТИРОВКА ПОДСЧЕТОМ (COUNTING SORT) 3 2 3 3 1 3

    1 1 2 2 C[] 1 2 3 0 4 8 1 1 1 2 2 3 3 1 2 3 4 5 6 7 8 9 10
  165. СОРТИРОВКА ПОДСЧЕТОМ (COUNTING SORT) 3 2 3 3 1 3

    1 1 2 2 C[] 1 2 3 0 4 7 1 1 1 2 2 3 3 3 1 2 3 4 5 6 7 8 9 10
  166. СОРТИРОВКА ПОДСЧЕТОМ (COUNTING SORT) 3 2 3 3 1 3

    1 1 2 2 C[] 1 2 3 0 3 7 1 1 1 2 2 2 3 3 3 1 2 3 4 5 6 7 8 9 10
  167. СОРТИРОВКА ПОДСЧЕТОМ (COUNTING SORT) 3 2 3 3 1 3

    1 1 2 2 C[] 1 2 3 0 3 6 1 1 1 2 2 2 3 3 3 3 1 2 3 4 5 6 7 8 9 10
  168. СВОЙСТВА СОРТИРОВКИ ПОДСЧЕТОМ • Временная сложность O(N+K). • Стабильность. •

    Дополнительная память: • вспомогательный массив длины N (если стабильность не нужна, можно обойтись без него); • массив счетчиков.
  169. ПОРАЗРЯДНАЯ СОРТИРОВКА (RADIX SORT) • Предположим, что ключи состоят из

    d «цифр». • Алгоритм «от младшей к старшей»: • Стабильная сортировка массива по 1-й цифре (младшей). • … по 2-й цифре. • … • … по d-й цифре (старшей).
  170. ПОРАЗРЯДНАЯ СОРТИРОВКА (RADIX SORT) 170 25 75 90 802 24

    2 66
  171. ПОРАЗРЯДНАЯ СОРТИРОВКА (RADIX SORT) 170 25 75 90 802 24

    2 66
  172. ПОРАЗРЯДНАЯ СОРТИРОВКА (RADIX SORT) 170 90 802 2 24 25

    75 66
  173. ПОРАЗРЯДНАЯ СОРТИРОВКА (RADIX SORT) 170 90 802 2 24 25

    75 66
  174. ПОРАЗРЯДНАЯ СОРТИРОВКА (RADIX SORT) 802 2 24 25 66 170

    75 90
  175. ПОРАЗРЯДНАЯ СОРТИРОВКА (RADIX SORT) 802 2 24 25 66 170

    75 90
  176. ПОРАЗРЯДНАЯ СОРТИРОВКА (RADIX SORT) 2 24 25 66 75 90

    170 802
  177. ПОРАЗРЯДНАЯ СОРТИРОВКА (RADIX SORT) 2 24 25 66 75 90

    170 802
  178. АНАЛИЗ ПОРАЗРЯДНОЙ СОРТИРОВКИ (RADIX SORT) • На практике 32-битное целое

    число можно разбить на 4 байта («цифры»). • Сложность O(N). • Идея годится для сортировки по произвольным составным ключам.
  179. СОРТИРОВКИ НА ПРАКТИКЕ • В прикладных программах достаточно стандартной библиотеки.

    • Серьезные алгоритмы зачастую представляют смесь: • быстрая + вставками (C, C++), • быстрая + пирамидальная (Introsort), • слиянием + вставками (Timsort) (Python, Java, Android). • Используйте алгоритм, подходящий к вашей задаче.
  180. Даны 7 массивов чисел: 1. C 1 4 F 2

    B 8 D E 7 A 9 0 6 3 5 2. 1 4 2 B 8 C D 7 A 9 0 6 3 5 E F 3. D C B 5 A 9 8 3 1 7 2 4 0 6 E F 4. 0 1 2 3 4 B 8 D E 7 A 9 C 6 F 5 5. 1 2 4 8 B C F D E 7 A 9 0 6 3 5 6. 0 1 4 5 2 B 8 3 6 7 A 9 C E D F 7. 0 1 2 3 4 5 6 7 8 9 A B C D E F Массив 1 — начальный. Массив 7 — отсортированный. Массивы 2-6 являются промежуточными состояниями при сортировке начального массива разными алгоритмами: a. сортировка выбором, b. пузырьковая сортировка (обычная, слева направо), c. сортировка вставками, d. быстрая сортировка (без перемешивания, первый элемент как медиана), e. пирамидальная сортировка. Определить, какой массив 2-6 соответствует какой сортировке a-e. Ответа недостаточно, нужно объяснение, почему именно этот массив может соответствовать именно этой сортировке. Подсказка: нужно заметить характерные свойства каждой из сортировок. ЗАДАЧКА О СОРТИРОВКАХ
  181. КОНЕЦ ТРЕТЬЕЙ ЛЕКЦИИ