Programování
Selection sort
Selection sort je jedním z nejjednodušších řadících algoritmů. Jeho
myšlenka spočívá v nalezení minima, které se přesune na začátek pole
(nebo můžeme hledat i maximum a to dávat na konec). V prvním kroku tedy
nalezneme nejmenší prvek v poli a ten poté přesuneme na začátek. V druhém
kroku již nebudeme při hledání minima brát v potaz dříve nalezené
minimum. Po dostatečném počtu kroků dostaneme pole seřazené. Algoritmus
má nepříliš výhodnou časovou složitost a není stabilní. Je však velice
jednoduchý na pochopení i implementaci.
Není stabilní
Na místě
O (n²)
Pomalý
Omicron: n²
Omega: n²
Theta: n²
Průběh
Máme pole následujících prvků:
Nyní cyklem projedeme pole od prvního do posledního prvku (rozsah cyklu je
zvýrazněn barevně) a vybereme to nejmenší číslo (zde 1).
Toto číslo prohodíme s prvním číslem (zde s 3):
Tímto krokem jsme dostali první prvek v pole zatříděný. Nyní cyklem
opět projedeme pole a najdeme nejmenší prvek. Ale protože ten úplně
nejmenší již máme na začátku, nebudeme ho zahrnovat a projedeme tedy pole
od druhého do posledního prvku a opět vybereme nejmenší prvek (2):
Prvek si opět zatřídíme, protože již máme 1 prvek zatříděný z
minula, prohodíme ho s druhým prvkem (5).
Teď máme již 2 první prvky správně. Takto budeme pokračovat dále,
budeme vybírat minimum ze zbylých prvků a zatřizovat ho tak dlouho, dokud
nebudeme mít pole celé setříděné. Další kroky algoritmu by vypadaly
následovně:
Poslední prvek je již logicky zatříděný, proto si můžeme tento krok
ušetřit. A je hotovo.
3 | 5 | 2 | 8 | 9 | 1 |
3 | 5 | 2 | 8 | 9 | 1 |
1 | 5 | 2 | 8 | 9 | 3 |
1 | 5 | 2 | 8 | 9 | 3 |
1 | 2 | 5 | 8 | 9 | 3 |
1 | 2 | 5 | 8 | 9 | 3 |
1 | 2 | 3 | 8 | 9 | 5 |
1 | 2 | 3 | 8 | 9 | 5 |
1 | 2 | 3 | 5 | 9 | 8 |
1 | 2 | 3 | 5 | 9 | 8 |
1 | 2 | 3 | 5 | 8 | 9 |
Kod
public int[] SelectionSort()
{
var arrayLength = NumArray.Length;
for (int i = 0; i < arrayLength - 1; i++)
{
var smallestVal = i;
for (int j = i + 1; j < arrayLength; j++)
{
if (NumArray[j] < NumArray[smallestVal])
{
smallestVal = j;
}
}
var tempVar = NumArray[smallestVal];
NumArray[smallestVal] = NumArray[i];
NumArray[i] = tempVar;
}
return NumArray;
}
Video
Zdroj: Video Link