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

САКОД – 2 курс весна 2021 – 2.2 занятие

САКОД – 2 курс весна 2021 – 2.2 занятие

ТиМПИ

March 02, 2021
Tweet

More Decks by ТиМПИ

Other Decks in Programming

Transcript

  1. 2/15 2/15 • Исходные данные – последовательность чисел 𝑎1 ,

    𝑎2 , … 𝑎𝑛 . Результат – последовательность 𝑎1 ′ , 𝑎2 ′ , … 𝑎𝑛 ′ , состоящая из тех же чисел, идущих в неубывающем порядке. Постановка задачи
  2. 3/15 3/15 • Идея метода: шаг сортировки состоит в проходе

    снизу вверх по массиву. По пути просматриваются пары соседних элементов. Если элементы некоторой пары находятся в неправильном порядке, то меняем их местами. Сортировка пузырьком template<class T> void bubbleSort(T a[], long size) { long i, j; T x; for( i=0; i < size; i++) { // i - номер прохода for( j = size-1; j > i; j-- ) { // внутренний цикл прохода if ( a[j-1] > a[j] ) { x=a[j-1]; a[j-1]=a[j]; a[j]=x; } } } }
  3. 4/15 4/15 Сортировка пузырьком • Лучший случай 𝒏 • Средний

    случай 𝒏𝟐 • Худший случай 𝒏𝟐 • Оценка памяти 1 • Стабильность Да Особенности: мало кода, быстро реализуется
  4. 5/15 5/15 Сортировка вставками Общая суть сортировок вставками такова: 1.

    Перебираются элементы в неотсортированной части массива. 2. Каждый элемент вставляется в отсортированную часть массива на то место, где он должен находиться. template<class T> void insertSort(T a[], long size) { T x; long i, j; for ( i=0; i < size; i++) { // цикл проходов, i - номер прохода x = a[i]; // поиск места элемента в готовой последовательности for ( j=i-1; j>=0 && a[j] > x; j--) a[j+1] = a[j]; // сдвигаем элемент направо, пока не дошли // место найдено, вставить элемент a[j+1] = x; } }
  5. 6/15 6/15 • Лучший случай 𝒏 • Средний случай 𝒏𝟐

    • Худший случай 𝒏𝟐 • Оценка памяти 1 • Стабильность Да • Особенности: лучшее решение для почти упорядоченных массивов
  6. 7/15 7/15 Сортировка Шелла Основан на сравнении элементов массива, расположенных

    на определенном расстоянии друг от друга, которое постепенно уменьшается до 1. • Шаг 0. 𝑖 = 𝑡 • Шаг 1. Разобьем массив на списки элементов, отстающих друг от друга на ℎ𝑖 . Таких списков будет ℎ𝑖. • Шаг 2. Отсортируем элементы каждого списка сортировкой вставками. • Шаг 3. Объединим списки обратно в массив. Уменьшим 𝑖. Если 𝑖 неотрицательно — вернемся к шагу 1 • Конец.
  7. 8/15 8/15 Сортировка Шелла • Лучший случай 𝒏 log 𝒏

    • Средний случай 𝒏𝟒/𝟑 • Худший случай 𝒏𝟑/𝟐 • Оценка памяти 1 • Стабильность Нет Особенности: мало кода
  8. 9/15 9/15 Метод основан на подходе "разделяй-и-властвуй". Общая схема такова:

    1. из массива выбирается некоторый опорный элемент a[i] 2. запускается процедура разделения массива, которая перемещает все ключи, меньшие, либо равные a[i], влево от него, а все ключи, большие, либо равные a[i] – вправо 3. теперь массив состоит из двух подмножеств, причем левое меньше, либо равно правого 4. для обоих подмассивов: если в подмассиве более двух элементов, рекурсивно запускаем для него ту же процедуру. В конце получится полностью отсортированная последовательность. Быстрая сортировка
  9. 10/15 10/15 • Лучший случай 𝒏 log 𝒏 • Средний

    случай 𝒏 log 𝒏 • Худший случай 𝒏𝟐 • Оценка памяти log 𝒏 • Стабильность Нет Быстрая сортировка является наиболее широко применяемым и одним их самых эффективных алгоритмов Быстрая сортировка
  10. 11/15 11/15 Алгоритм использует принцип «разделяй и властвуй»: задача разбивается

    на подзадачи меньшего размера, которые решаются по отдельности, после чего их решения комбинируются для получения решения исходной задачи. 1.Если в рассматриваемом массиве один элемент, то он уже отсортирован — алгоритм завершает работу 2.Иначе массив разбивается на две части, которые сортируются рекурсивно 3.После сортировки двух частей массива к ним применяется процедура слияния, которая по двум отсортированным частям получает исходный отсортированный Сортировка слиянием
  11. 12/15 12/15 Сортировка слиянием • Лучший случай 𝒏 log 𝒏

    • Средний случай 𝒏 log 𝒏 • Худший случай 𝒏 log 𝒏 • Оценка памяти 𝒏 • Стабильность Нет Особенности: •можно написать эффективную многопоточную сортировку слиянием, •сортировка данных, расположенных на периферийных устройствах и не вмещающихся в оперативную память
  12. 14/15 14/15 Как выбрать алгоритм сортировки Критерий Алгоритм Маленький массив

    Сортировка вставками Почти упорядоченный массив Сортировка вставками Важна работа в среднем Быстрая сортировка Нужно мало кода Сортировка вставками