Navigace: Hlavní stránka -> PASCAL -> 05 Jednorozměrná pole -> 05.08 Třídění pole - bublinková metoda

MENU

05.08 Třídění pole - bublinková metoda

Zadání:
Sestavte program, který seřadí pole náhodných čísel bublinkovou metodou.
Řešení:
Nejprve pomocí cyklu FOR naplníme pole o deseti prvcích náhodnými čísly z intervalu 0..99 a pole vytiskneme.
Poté pomocí cyklu REPEAT otestujeme, zda je pole setříděné. Na jeho začátku vložíme do proměnné setrideno
hodnotu TRUE (předpokládáme, že pole je setříděné). Poté pomocí cyklu FOR porovnáme všechny dvojice
sousedících prvků, zda jsou setříděné. Pokud ne, vyměníme vzájemně jejich hodnoty a zároveň vložíme
do proměnné setrideno hodnotu FALSE (nastala výměna, pole ještě není setříděné). V podmínce cyklu REPEAT
otestujeme, zda v proměnné setrideno zůstala hodnota TRUE (nenastala žádná výměna, pole je setříděné)
nebo FALSE (nastala výměna, pole je nutné projít ještě jednou).
Na konci programu setříděné pole vytiskneme.
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var pole:array[1..10] of integer;
    i,pom:integer;
    setrideno:boolean;
begin

   randomize;

   for i:=1 to 10 do pole[i]:=random(100);

   writeln('Puvodni pole:');
   for i:=1 to 10 do write(pole[i],' ');

   repeat
      setrideno:=true;
      for i:=1 to 9 do
         if pole[i]>pole[i+1] then
         begin
            pom:=pole[i];
            pole[i]:=pole[i+1];
            pole[i+1]:=pom;
            setrideno:=false;
         end;
   until setrideno;

   writeln;

   writeln('Setridene pole:');
   for i:=1 to 10 do write(pole[i],' ');

   readln;

end.

program ke stažení

Pro studenty:
V cyklu FOR mění řídící proměnná i hodnoty v intervalu 1..9, protože pole má sice 10 prvků, ovšem na porovnávání
máme pouze 9 dvojic.
Tento program třídí pole vzestupně, zamyslete se, jakou malou úpravou programu by třídění probíhalo sestupně.