headerphoto

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

Design downloaded from Free Templates - your source for free web templates