Сортировка выбором

Описание алгоритма

  1. Найти наименьшее значение в исходном множестве.
  2. Записать его в начало множества, а первый элемент - на место наименьшего.
  3. Снова найти наименьший элемент в оставшемся множестве и переместить его на второе место. Второй элемент при этом перемещается на освободившееся место.
  4. Продолжать выполнять поиcк и обмен, пока не будет достигнут конец множества.

Исходный код на Python

Как найти наименьшее значение в списке?

s = [2,4,1,3]  #подопытный список 
 
m = 0   #индекс первого элемента
i = 1     #индекс второго элемента 
 
while i < len(s): #пока индекс меньше длины строки
   if s[i] < s[m]: # если значение под индексом i меньше, чем под m,
        m = i # то присвоить m индекс i
    i += 1 # увеличить i на единицу 
 
print (s[m]) # вывести значение элемента под индексом m

Обратите внимание на строку while i < len(s):. Не нужно писать <=, т.к. индексация начинается с нуля. Это значит, что когда i равен 3, то мы обращаемся к 4-му элементу списка (в примере, это как раз конец строки).
Как поменять два значения в списке местами?

s = [2,4,9,1,3,7,5]  #подопытный список
# требуется поменять местами первый и четвертый элементы
m = 0   #индекс первого элемента
i = 3   #индекс четвертого элемента 
 
t = s[m] # сохраняется значение под индексом m
s[m] = s[i] # на его место записывается значение под индексом i
s[i] = t # на место значения под индексом i записывается ранее сохраненное значение под индексом m 

Полный алгоритм сортировки выбором

s = [2,4,8,1,0,3,9,5,7,6]
print (s) 
 
#в переменной k хранится индекс элемента, подлежащего обмену (двигаемся слева на право)
k = 0
while k < len(s) - 1: #-1, т.к. последний элемент обменивать уже не надо
    m = k #в m хранится минимальное значение
    i = k + 1 #откуда начинать поиск минимума (элемент следующий за k)
    while i < len(s):
        if s[i] < s[m]:
            m = i
        i += 1
    t = s[k]
    s[k] = s[m]
    s[m] = t
    k += 1 #переходим к следующему значению для обмена 
 
print(s) 

Оформление алгоритма в виде функции и пример использования цикла for

def mymin(mylist):
    for k in range(len(mylist) - 1):
        m = k
        i = k + 1
        while i < len(mylist):
            if mylist[i] < mylist[m]:
                m = i
            i += 1
        t = mylist[k]
        mylist[k] = mylist[m]
        mylist[m] = t

Создано