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.
Module Module1
Sub Main()
Dim pole1(9), pole2(9), i, j, min, pozmin As Integer
Randomize(Timer)
For i = 0 To 9
pole1(i) = Rnd() * 100
Next
Console.WriteLine("Puvodni pole:")
For i = 0 To 9
Console.Write("{0} ", pole1(i))
Next
For i = 0 To 9
min = pole1(i)
pozmin = i
For j = i + 1 To 9
If pole1(j) < min Then
min = pole1(j)
pozmin = j
End If
Next
pole2(i) = min
pole1(pozmin) = pole1(i)
Next
Console.WriteLine()
Console.WriteLine("Setridene pole:")
For i = 0 To 9
Console.Write("{0} ", pole2(i))
Next
Console.ReadLine()
End Sub
End Module
program ke stažení