Navigace: Hlavní stránka -> Jazyk C -> 05 Jednorozměrná pole -> 05.08 Třídění pole - bublinková metoda

MENU

05.08 Třídění pole - bublinková metoda

Zadání:
Sestavte program, který seřadí pole náhodných čísel bublinkovou metodou.
Řešení:
Nejprve pomocí cyklu FOR naplníme pole o deseti prvcích náhodnými čísly z intervalu 0..99 a pole vytiskneme.
Poté pomocí cyklu DO ... WHILE otestujeme, zda je pole setříděné. Na jeho začátku vložíme do proměnné
setrideno hodnotu TRUE (předpokládáme, že pole je setříděné). Poté pomocí cyklu FOR porovnáme všechny
dvojice sousedících prvků, zda jsou setříděné. Pokud ne, vyměníme vzájemně jejich hodnoty a zároveň vložíme
do proměnné setrideno hodnotu FALSE (nastala výměna, pole ještě není setříděné). V podmínce cyklu
DO ... WHILE otestujeme, zda v proměnné setrideno zůstala hodnota TRUE (nenastala žádná výměna,
pole je setříděné) nebo FALSE (nastala výměna, pole je nutné projít ještě jednou).
Na konci programu setříděné pole vytiskneme.
#include "stdafx.h"
#include "math.h"
#include 
#include 
#include 

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	int pole[10];
    int i,pom;
    bool setrideno;

	srand(time(NULL));

    for (i=0;i<10;i++) pole[i]=rand()%100;

    printf("Puvodni pole:\n");
    for (i=0;i<10;i++) printf("%d ",pole[i]);

    do
	{
       setrideno=true;
       for (i=0;i<9;i++)
          if (pole[i]>pole[i+1])
		  {
             pom=pole[i];
             pole[i]=pole[i+1];
             pole[i+1]=pom;
             setrideno=false;
		  }
	}
	while (!setrideno);

    printf("\nSetridene pole:\n");
    for (i=0;i<10;i++) printf("%d ",pole[i]);

	printf("\n");

    system("pause");
	return 0;
}

program ke stažení

Pro studenty:
V cyklu FOR mění řídící proměnná i hodnoty v intervalu 0..8, protože pole má sice 10 prvků, ovšem na porovnávání
máme pouze 9 dvojic.
Tento program třídí pole vzestupně, zamyslete se, jakou malou úpravou programu by třídění probíhalo sestupně.