снизу вверх по массиву. По пути просматриваются пары соседних элементов. Если элементы некоторой пары находятся в неправильном порядке, то меняем их местами. Сортировка пузырьком 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; } } } }
Перебираются элементы в неотсортированной части массива. 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; } }
на определенном расстоянии друг от друга, которое постепенно уменьшается до 1. • Шаг 0. 𝑖 = 𝑡 • Шаг 1. Разобьем массив на списки элементов, отстающих друг от друга на ℎ𝑖 . Таких списков будет ℎ𝑖. • Шаг 2. Отсортируем элементы каждого списка сортировкой вставками. • Шаг 3. Объединим списки обратно в массив. Уменьшим 𝑖. Если 𝑖 неотрицательно — вернемся к шагу 1 • Конец.
1. из массива выбирается некоторый опорный элемент a[i] 2. запускается процедура разделения массива, которая перемещает все ключи, меньшие, либо равные a[i], влево от него, а все ключи, большие, либо равные a[i] – вправо 3. теперь массив состоит из двух подмножеств, причем левое меньше, либо равно правого 4. для обоих подмассивов: если в подмассиве более двух элементов, рекурсивно запускаем для него ту же процедуру. В конце получится полностью отсортированная последовательность. Быстрая сортировка
случай 𝒏 log 𝒏 • Худший случай 𝒏𝟐 • Оценка памяти log 𝒏 • Стабильность Нет Быстрая сортировка является наиболее широко применяемым и одним их самых эффективных алгоритмов Быстрая сортировка
на подзадачи меньшего размера, которые решаются по отдельности, после чего их решения комбинируются для получения решения исходной задачи. 1.Если в рассматриваемом массиве один элемент, то он уже отсортирован — алгоритм завершает работу 2.Иначе массив разбивается на две части, которые сортируются рекурсивно 3.После сортировки двух частей массива к ним применяется процедура слияния, которая по двум отсортированным частям получает исходный отсортированный Сортировка слиянием
• Средний случай 𝒏 log 𝒏 • Худший случай 𝒏 log 𝒏 • Оценка памяти 𝒏 • Стабильность Нет Особенности: •можно написать эффективную многопоточную сортировку слиянием, •сортировка данных, расположенных на периферийных устройствах и не вмещающихся в оперативную память