Сортировка вставками — различия между версиями
Borisov (обсуждение | вклад) |
Borisov (обсуждение | вклад) (→Пример работы) |
||
Строка 23: | Строка 23: | ||
!style="background-color:#EEE"| Описание шага | !style="background-color:#EEE"| Описание шага | ||
|- | |- | ||
− | |''Первый проход(проталкиваем второй элемент — '''''2''''')'' | + | |colspan=3|''Первый проход (проталкиваем второй элемент — '''''2''''')'' |
|- | |- | ||
|style="background-color:#FFF;padding:2px 10px"| '''5 2''' 4 3 1 | |style="background-color:#FFF;padding:2px 10px"| '''5 2''' 4 3 1 | ||
Строка 29: | Строка 29: | ||
|style="background-color:#FFF;padding:2px 10px"| Алгоритм сравнивает второй элемент с первым и меняет их местами. | |style="background-color:#FFF;padding:2px 10px"| Алгоритм сравнивает второй элемент с первым и меняет их местами. | ||
|- | |- | ||
− | |''Второй проход(проталкиваем третий элемент — '''''4''''')'' | + | |colspan=3|''Второй проход (проталкиваем третий элемент — '''''4''''')'' |
|- | |- | ||
|style="background-color:#FFF;padding:2px 10px"| 2 '''5 4''' 3 1 | |style="background-color:#FFF;padding:2px 10px"| 2 '''5 4''' 3 1 | ||
Строка 38: | Строка 38: | ||
|style="background-color:#FFF;padding:2px 10px"| '''2 4''' 5 3 1 | |style="background-color:#FFF;padding:2px 10px"| '''2 4''' 5 3 1 | ||
|style="background-color:#FFF;padding:2px 10px"| Второй и первый отсортированы, swap не требуется | |style="background-color:#FFF;padding:2px 10px"| Второй и первый отсортированы, swap не требуется | ||
− | |||
|- | |- | ||
− | |''Третий проход(проталкиваем четвертый — '''''3''''')'' | + | |colspan=3|''Третий проход (проталкиваем четвертый — '''''3''''')'' |
|- | |- | ||
|style="background-color:#FFF;padding:2px 10px"| 2 4 '''5 3''' 1 | |style="background-color:#FFF;padding:2px 10px"| 2 4 '''5 3''' 1 | ||
Строка 55: | Строка 54: | ||
|- | |- | ||
− | |''Четвертый проход(проталкиваем пятый элемент — '''''1''''')'' | + | |colspan=3|''Четвертый проход (проталкиваем пятый элемент — '''''1''''')'' |
|- | |- | ||
|style="background-color:#FFF;padding:2px 10px"| 2 3 4 '''5 1''' | |style="background-color:#FFF;padding:2px 10px"| 2 3 4 '''5 1''' |
Версия 15:09, 13 мая 2012
Сортировка вставками — квадратичный алгоритм сортировки.
Содержание
Алгоритм
<wikitex>На каждом шаге алгоритма мы выбираем один из элементов входных данных и вставляем его на нужную позицию в уже отсортированной части массива, до тех пор пока весь набор входных данных не будет отсортирован. Метод выбора очередного элемента из исходного массива произволен, однако обычно (и с целью получения устойчивого алгоритма сортировки), элементы вставляются по порядку их появления во входном массиве.
Алгоритм в лучшем случае работает за $O(n)$ + число обменов. В среднем и в худшем случае — за $O(n^2)$.</wikitex>
Псевдокод
<wikitex>
for (int i = 1; i $\leqslant$ n - 1; i++) j $\leftarrow$ i - 1 while (j $\geqslant$ 0 && a[j] > a[j + 1]) a[j] $\leftrightarrow$ a[j + 1] j $\leftarrow$ j - 1
</wikitex>
Пример работы
Пример работы алгоритма для массива [5, 2, 4, 3, 1]
До | После | Описание шага |
---|---|---|
Первый проход (проталкиваем второй элемент — 2) | ||
5 2 4 3 1 | 2 5 4 3 1 | Алгоритм сравнивает второй элемент с первым и меняет их местами. |
Второй проход (проталкиваем третий элемент — 4) | ||
2 5 4 3 1 | 2 4 5 3 1 | Сравнивает третий со вторым и меняет местами |
2 4 5 3 1 | 2 4 5 3 1 | Второй и первый отсортированы, swap не требуется |
Третий проход (проталкиваем четвертый — 3) | ||
2 4 5 3 1 | 2 4 3 5 1 | Меняет четвертый и третий местами |
2 4 3 5 1 | 2 3 4 5 1 | Меняет третий и второй местами |
2 3 4 5 1 | 2 3 4 5 1 | Второй и первый отсортированы, swap не требуется |
Четвертый проход (проталкиваем пятый элемент — 1) | ||
2 3 4 5 1 | 2 3 4 1 5 | Меняет пятый и четвертый местами |
2 3 4 1 5 | 2 3 1 4 5 | Меняет четвертый и третий местами |
2 3 1 4 5 | 2 1 3 4 5 | Меняет третий и второй местами |
2 1 3 4 5 | 1 2 3 4 5 | Меняет второй и первый местами. Массив отсортирован. |
См. также
- Сортировка пузырьком
- Сортировка выбором
- Сортировка кучей
- Сортировка слиянием
- Быстрая сортировка
- Сортировка подсчетом