Ř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í.