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