O mojí osobě

Něco ke stažení

Články a návody

Poezie

Odkazy

Bubble sort



Bubble sort, neboli bublinkové třídění, patří k nejjednodušším algoritmům na setřídění posloupnosti prvků. Při třídění prochází vstupní prvky, vždy dva sousední porovnává a v případě potřeby prohazuje. Protože po prvním průchodu se nám na poslední pozici dostane prvek, který je největší (nebo nejmenší, podle směru třídění) a už s ním nebudeme hýbat, nemusíme již tento prvek v příštím průchodu testovat a po každém průchodu se nám tedy o jeden prvek zmenší posloupnost prvků nesetříděných. Pokud při jednom průchodu nedojde ani k jednomu prohození prvků, je již posloupnost setříděná a algoritmus ukončíme.

Existuje i několik modifikací tohoto základního algoritmu, například obousměrný Bubblesort - ten střídá průchody posloupností zleva doprava a zprava doleva, takže na začátku se hromadí prvky nejmenší a na konci prvky největší.

Algoritmus Bubblesort má časovou složitost O(n^2), takže se pro běžné třídění nepoužívá. Lze ho ale velmi dobře použít pro třídění v některých speciálních případech kdy dochází jen k malému počtu prohození prvků, neboť pro setřídění již utříděné posloupnosti potřebuje čas pouze O(n). Jeho další výhodou je nenáročnost na paměť - pro provedení třídění si vystačíme pouze s pamětí, kterou zabírají vstupní prvky a nepotřebujeme žádnou další pracovní paměť ani zásobníky.

Příklad setřídění pole prvků typu float:

void BubbleSort(float *pole)
{
int delka,i,j,flip;
float pomocny;


//tady se mi spocte delka pole
delka=Spocti_delku(pole);

for (i=delka; i>0; i--) 
     {
     flip=0;	// tohle je pocitadlo, jestli probehla vymena
     for (j=1;jpole[j]) 
		{	
		// prohodime prvky a zvysime pocitadlo
		pomocny=pole[j];
		pole[j]=pole[j-1];
		polo[j-1]=pomocny;
		flip++;			
		};
	};	
     if (flip==0) break;	
	//neprobehla vymena => jsme hotovi
     };
return;
};

Zpět na index