Navigace: Hlavní stránka -> BASIC -> 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.
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í