Navigace: Hlavní stránka -> PASCAL -> 05 Jednorozměrná pole -> 05.09 Třídění pole - metoda opakovaného hledání minima

MENU

05.09 Třídění pole - metoda opakovaného hledání minima

Zadání:
Sestavte program, který seřadí pole náhodných čísel opakovaným hledáním minima.
Řešení:
Na řešení tohoto algoritmu budeme potřebovat dvě pole - pole nesetříděných prvků (pole1) a pole setříděných prvků
(pole2).
Nejprve pomocí cyklu FOR naplníme pole pole1 o deseti prvcích náhodnými čísly z intervalu 0..99 a pole vytiskneme.

Výkonná část programu je prováděna v cyklu FOR. Nejprve nalezneme nejmenší prvek v poli a jeho pozici. Pak tento
prvek vložíme do druhého pole a na pozici minimálního prvku v poli 1 vložíme prvek, od kterého jsme začínali.

Ukázka řešení:
Nestříděné pole: 48 52 2 5 18 98 77 63 38 81
Setříděné pole: X X X X X X X X X X
Začneme od prvního prvku, tedy od čísla 48. Prohlásíme ho za minimální prvek a pozici minimálního prvku nastavíme
na 1 ( min:=pole1[i]; pozmin:=i; ). Pak s minimem porovnáme všechny ostatní prvky a pokud nalezneme prvek menší,
vložíme ho do minima a zapíšeme si jeho pozici (druhý cyklus FOR s řídící proměnnou j). Poté vložíme nalezené
minimum do druhého pole na pozici 1.
Nalezené minimum: 2
Pozice minima: 3
Nestříděné pole: 48 52 2 5 18 98 77 63 38 81
Setříděné pole: 2 X X X X X X X X X
Poté ještě vložíme na pozici nalezeného minima číslo, od kterého jsme začínali ( pole1[pozmin]:=pole1[i] ):
Nestříděné pole: 48 52 48 5 18 98 77 63 38 81
Setříděné pole: 2 X X X X X X X X X
Poté se řídící proměnnou i přesuneme na další prvek v poli 1 (číslo 52) a celou operaci opakujeme:
Nalezené minimum: 5
Pozice minima: 4
Nestříděné pole: 48 52 48 5 18 98 77 63 38 81
Setříděné pole: 2 5 X X X X X X X X
Nahrazením minima:
Nestříděné pole: 48 52 48 52 18 98 77 63 38 81
Setříděné pole: 2 5 X X X X X X X X
Takto postupně projdeme celé pole a po setřídění pole vytiskneme.
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var pole1,pole2:array[1..10] of integer;
    i,j,min,pozmin:integer;

begin

   randomize;

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

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

   for i:=1 to 10 do
   begin
      min:=pole1[i];
      pozmin:=i;
      for j:=i+1 to 10 do
         if pole1[j]<min then
         begin
            min:=pole1[j];
            pozmin:=j;
         end;
      pole2[i]:=min;
      pole1[pozmin]:=pole1[i];
   end;

   writeln;

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

   readln;

end.
program ke stažení