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.
#include "stdafx.h"
#include "math.h"
#include
#include
#include
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int pole1[10],pole2[10];
int i,j,min,pozmin;
srand((int)time(NULL));
for (i=0;i<10;i++) pole1[i]=rand()%100;
printf("Puvodni pole:\n");
for (i=0;i<10;i++) printf("%d ",pole1[i]);
for (i=0;i<10;i++)
{
min=pole1[i];
pozmin=i;
for (j=i+1;j<10;j++)
if (pole1[j]<min)
{
min=pole1[j];
pozmin=j;
}
pole2[i]=min;
pole1[pozmin]=pole1[i];
}
printf("\nSetridene pole:\n");
for (i=0;i<10;i++) printf("%d ",pole2[i]);
printf("\n");
system("pause");
return 0;
}
program ke stažení