Řazení hodnot v poli - Selection Sort (řazení výběrem)
Jedná se o jednoduchý algoritmus, který je vhodný pro malé množství dat. Data jsou rozdělena na seřazenou a neseřazenou část. Ukážeme si dvě varianty algoritmu: řazení výběrem minima a řazení výběrem maxima.
Předpokládáme, že hodnoty jsou uloženy v poli a známe aktuální počet prvků v poli. V uvedených algoritmech řadíme hodnoty vzestupně.
Řazení výběrem minimální hodnoty
Princip algoritmu:
- najdeme prvek s nejmenší hodnotou v neseřazené části posloupnosti
- minimum zaměníme s prvkem na první pozici v neseřazené část
- posuneme hranici seřazené a neseřazené části o 1 pozici vpravo
- opakováním předchozích kroků seřadíme celou posloupnost
float cisla[100], pom, min; int i, pocet, imin, zac; //uvod programu //nacteni hodnot do pole, urceni aktualniho poctu prvku //pripadne dalsi prikazy for ( zac = 0; zac < pocet - 1; zac++) //posun zacatku { min = cisla[zac]; //zacatek algoritmu pro urceni minimalni hodnoty imin = zac; for ( i = zac; i < pocet; i++) { if ( cisla[i] < min ) { min = cisla[i]; imin = i; } } pom = cisla[zac]; //zamena s prvnim prvkem cisla[zac] = cisla[imin]; cisla[imin] = pom; } //pokracovani programu
Řazení výběrem maximální hodnoty
Algoritmus je obdobou předchozího - maximum postupně přesouváme na konec neseřazené posloupnosti.
Princip algoritmu:
- najdeme prvek s největší hodnotou v neseřazené části posloupnosti
- maximum zaměníme s prvkem na poslední pozici v neseřazené část
- posuneme hranici seřazené a neseřazené části o 1 pozici vlevo
- opakováním předchozích kroků seřadíme celou posloupnost
float cisla[100], pom, max; int i, pocet, imax, kon; //uvod programu //nacteni hodnot do pole, urceni aktualniho poctu prvku //pripadne dalsi prikazy for ( kon = pocet - 1; kon > 0; kon-- ) //posun konce { max = cisla[0]; //zacatek algoritmu pro urceni maximalni hodnoty imax = 0; for ( i = 0; i < kon + 1; i++) { if ( cisla[i] > max ) { max = cisla[i]; imax = i; } } pom = cisla[kon]; //zamena s poslednim prvkem cisla[kon] = cisla[imax]; cisla[imax] = pom; } //pokracovani programu
Pokuste se upravit oba algoritmy pro sestupné řazení.