Jednoduché řadicí algoritmy (řazení primitivních datových typů, problematika řazení objektů)
Níže je uveden pouze náhled materiálu. Kliknutím na tlačítko 'Stáhnout soubor' stáhnete kompletní formátovaný materiál ve formátu PDF.
Nevýhodou tohoto algoritmu je, že nachází-li se na vstupu již částečně setříděná posloupnost,
algoritmus takový fakt ignoruje a proběhne vždy maximální počet kroků.
Popis algoritmu v krocích:
1. v posloupnosti je nalezen nejmenší prvek a je vyměněn s prvkem na první pozici, čímž
dojde k rozdělení posloupnosti na dvě části; setříděná část zatím obsahuje pouze jeden
prvek, nesetříděná n-1
2. v nesetříděné části se opět najde nejmenší prvek a je vyměněn s prvkem na první pozici
nesetříděné části, čímž dojde však zároveň k zařazení prvku do části setříděné
3. obsahuje-li nesetříděná část více než jeden prvek, pokračuje se, od bodu dva, jinak je třídění
ukončeno
public static void SelectionSort(int[] array) {
for (int i = 0; i < array.Length - 1; i++) {
PAD Programování a databáze
Téma 22
Školní rok 2017/2018
2/2
Jan Švábík, V4D
int maxIndex = i;
for (int j = i + 1; j < array.Length; j++) {
if (array[j] > array[maxIndex]) maxIndex = j;
}
int tmp = array[i];
array[i] = array[maxIndex];
array[maxIndex] = tmp;
}
}
Insert sort (přímé vkládání)
Pole se dělí na setříděný a nesetříděný úsek. Na začátku je setříděný úsek tvořen pouze prvním
prvkem pole. První prvek nesetříděného úseku se vždy zařadí podle velikosti do setříděného
úseku, čímž se úsek nesetříděný zleva zkrátí o jeden prvek.
public static void insertSort(int[] array) {
for (int i = 0; i < array.length - 1; i++) {
int j = i + 1;
int tmp = array[j];
while (j > 0 && tmp > array[j-1]) {
array[j] = array[j-1];
j--;
}
array[j] = tmp;
}
}