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)