Sortowanie przez wybór działa na zasadzie ciągłego wybierania najmniejszego elementu z coraz mniejszego zbioru danych. Algorytm jest niestabilny [b1,b2,a,c]. Wada algorytmu: czas jego działania prawie nie zależy od stopnia uporządkowania ciągu.
Porównania: (n-1) + (n-2) + ... + 2 + 1 = n*(n-1)/2.
Przestawienia: (n-1) [bardzo mało].
def selectsort(L, left, right):
for i in range(left, right):
k = i
for j in range(i+1, right+1):
if L[j] < L[k]:
k = j
swap(L, i, k)
Zwiększając liczbę przestawień możemy otrzymać stabilną wersję sortowania przez wybór.
def selectsort(L, left, right):
for i in range(left, right):
k = i
for j in range(i+1, right+1):
if L[j] < L[k]:
k = j
item = L[k]
while k > i:
L[k] = L[k-1]
k = k-1
L[i] = item
Sortowanie przez wybór ma strukturę rekurencyjną: ustaw najmniejszy element na pozycji left, sortuj L w zakresie od left+1 do right.
def selectsort(L, left, right):
if left < right:
k = left
for j in range(left+1, right+1):
if L[j] < L[k]:
k = j
item = L[k]
while k > left:
L[k] = L[k-1]
k = k-1
L[left] = item
selectsort(L, left+1, right)