65
правок
Изменения
м
Исправлена ошибка в таблице и доработано выделение цветом.
'''Вариант 1.'''
Будем каждый раз проходить по всем еще не отсортированным элементам, и, как только найдем элемент меньше, чем первый из неотсортированных, поменяем их местами. Таким образом будет нужно <tex>O(n^2)</tex> обменов (для каждого <tex>i</tex> требуется <tex>O(n-i)</tex> обменов).
'''function''' selectionSort(array '''T[n]''' a):
'''for''' i = 0 '''to''' n - 2
'''for''' j = i + 1 '''to''' n - 1
Второй вариант немного более экономный. Здесь мы будем менять местами элементы только <tex>1</tex> раз для каждого <tex>i</tex>, всего будет нужно <tex>O(n)</tex> обменов. Для этого сначала мы будем проходить по всем еще не отсортированным элементам, искать минимальный, и только потом менять местами минимальный и первый из неотсортированных.
'''function''' selectionSort(array '''T[n]''' a):
'''for''' i = 0 '''to''' n - 2
min = i
== Пример ==
Пусть дана последовательность из <tex>5</tex> элементов <tex>5, 4, 1, 2, 3</tex>. Будем выделять минимальный и текущий элемент на каждом шаге темно-зеленым фиолетовым цветом, а минимальный черным жирным.
{| style="background-color:#CCC;margin:0.5px"
|colspan=3|''Первый проход (текущий массив начинается с первого элемента)''
|-
|style="background-color:#FFF;padding:2px 10px"| <span style="color:darkviolet">'''5 '''</span> 4 <span style="color:darkgreenblack">'''1'''</span> 2 3|style="background-color:#FFF;padding:2px 10px"| Находим первый минимальный элемент {{---}} <span style="color:darkgreen">'''1'''</span>
|-
|style="background-color:#FFF;padding:2px 10px"| <span style="color:darkgreenblack">'''1'''</span> 4 <span style="color:darkgreendarkviolet">'''5'''</span> 2 3
|style="background-color:#FFF;padding:2px 10px"| Меняем минимальный и первый элементы местами
|-
|colspan=3|''Второй проход (текущий массив начинается со следующего элемента)''
|-
|style="background-color:#FFF;padding:2px 10px"| 1 <span style="color:darkviolet">'''4'''</span> 5 4 <span style="color:darkgreenblack">'''2'''</span> 3|style="background-color:#FFF;padding:2px 10px"| Находим следующий минимальный элемент {{---}} <span style="color:darkgreen">'''2'''</span>
|-
|style="background-color:#FFF;padding:2px 10px"| 1 <span style="color:darkgreenblack">'''2'''</span> 4 5 <span style="color:darkgreendarkviolet">'''54'''</span> 3
|style="background-color:#FFF;padding:2px 10px"| Меняем минимальный и второй элементы местами
|-
|colspan=3|''Третий проход (текущий массив начинается со следующего элемента)''
|-
|style="background-color:#FFF;padding:2px 10px"| 1 2 <span style="color:darkviolet">'''5'''</span> 4 5 <span style="color:darkgreenblack">'''3'''</span>|style="background-color:#FFF;padding:2px 10px"| Находим следующий минимальный элемент {{---}} <span style="color:darkgreen">'''3'''</span>
|-
|style="background-color:#FFF;padding:2px 10px"| 1 2 <span style="color:darkgreenblack">'''3'''</span> 5 4 <span style="color:darkgreendarkviolet">'''45'''</span>
|style="background-color:#FFF;padding:2px 10px"| Меняем минимальный и третий элементы местами
|-
|colspan=3|''Четвертый проход (текущий массив начинается со следующего элемента)''
|-
|style="background-color:#FFF;padding:2px 10px"| 1 2 3 5 <span style="color:darkgreenblack">'''4'''</span>|style="background-color:#FFF;padding:2px 10px"| Находим следующий минимальный элемент {{---}} <span style="color:darkgreenblack">'''4'''5</span> |-|style="background-color:#FFF;padding:2px 10px"| 1 2 3 <span style="color:darkgreen">Находим следующий минимальный элемент {{---}} '''4'''</span> <span style="color:darkgreen">'''5'''</span>|style="background-color:#FFF;padding:2px 10px"| . Меняем минимальный и четвертый элементы его местамис самим собой.
|-
|style="background-color:#FFF;padding:2px 10px"| 1 2 3 4 5