Třídění podle bublin není považováno za nejvhodnějšírychlou metodou navíc uzavírá seznam nejpomalejších způsobů objednávání. Má však také své výhody. Takže třídění metodou bubliny je nejlogičtějším a přirozenějším řešením problému, pokud chcete uspořádat prvky v určitém pořadí. Jeden obyčejný člověk například použije ručně, jednoduše pomocí intuice.
Název metody byl vynalezen pomocí analogie svzduchové bubliny ve vodě. To je metafora. Stejně jako malé vzduchové bubliny vzhůru - protože jejich hustota je větší než tekutina (v tomto případě - se voda), a každý prvek pole, tím menší je hodnota, tím pozvolnější až na vrchol čísel seznamu.
Třídění podle bubliny se provádí následovně:
Dokonce i kratší algoritmus budoucího programu lze psát následovně:
Nejjednodušší implementace je následující:
Postup Třídit podle Bubble;
Začátek
cyklus pro f od start_index až do end_index;
cyklus pro a od start_index až do end_index-1;
pokud masiv [i]> masiv [i + 1] (první prvek je větší než druhý), potom:
(měnit hodnoty v místech);
Konec
Samozřejmě zde jednoduchost jen zhoršujesituace: čím je algoritmus jednodušší, tím více ukazuje všechny nedostatky. Časově náročné je příliš velké i pro malé pole (tady přichází relativita: pro průměrného člověka se čas může zdát malý, ale v programátoru každou sekundu nebo dokonce milisekund na účtu).
Brali lepší implementaci. Například při zohlednění výměny hodnot v poli v některých místech:
Postup Třídit podle Bubble;
Začátek
třídění = true;
cyklus až do třídění = true;
třídění = false;
cyklus pro a od start_index až do end_index-1;
pokud masiv [i]> masiv [i + 1] (první prvek je větší než druhý), potom:
(prvky měníme na místech);
třídění = true; (uvedeno, že výměna byla provedena).
Konec.
Hlavní nevýhodou je doba trvání procesu. Jak dlouho funguje algoritmus třídění bublin?
Doba provedení se vypočítá ze čtverce počtu čísel v poli - konečný výsledek je úměrný.
V nejhorším případě bude pole předánotolikrát, kolikrát jsou v něm prvky, mínus jedna hodnota. Je to proto, že na konci je pouze jeden prvek, který nemá nic srovnat a poslední průchod přes pole se stává zbytečnou akcí.
Navíc je metoda třídění jednoduchávýměny, jak se také nazývá, pouze pro pole malé velikosti. Velké množství dat nemůže být zpracováno s využitím: výsledek bude buď chyba, nebo selhání programu.
Třídění bubliny je velmi jednoduché.Ve studijních plánech technických vysokých škol při průchodu prvků pole přechází nejprve. Tato metoda je snadno implementovat i programovací jazyk Delphi (L (Delphi) a C / C ++ (C / C a plus), neuvěřitelně jednoduchá hodnoty umístění algoritmu ve správném pořadí a ve Pascal (Pascal). Bubble sort je ideální pro začátečníky.
Z důvodu nedostatků se algoritmus nepoužívá pro mimoškolní účely.
Počáteční pohled pole je 8 22 4 74 44 37 1 7
Krok 1 8 22 4 74 44 37 1 7
8 22 4 74 44 1 37 7
8 22 4 74 1 44 37 7
8 22 4 1 74 44 37 7
8 22 1 4 74 44 37 7
8 1 22 4 74 44 37 7
1 8 22 4 74 44 37 7
Krok 2 1 8 22 4 74 44 7 37
1 8 22 4 74 7 44 37
1 8 22 4 7 74 44 37
1 8 22 4 7 74 44 37
1 8 4 22 7 74 44 37
1 4 8 22 7 74 44 37
Krok 3 1 4 8 22 7 74 37 44
1 4 8 22 7 37 74 44
1 4 8 22 7 37 74 44
1 4 8 7 22 37 74 44
1 4 7 8 22 37 74 44
Krok 4 1 4 7 8 22 37 44 74
1 4 7 8 22 37 44 74
1 4 7 8 22 37 44 74
1 4 7 8 22 37 44 74
Krok 5 1 4 7 8 22 37 44 74
1 4 7 8 22 37 44 74
1 4 7 8 22 37 44 74
Krok 6 1 4 7 8 22 37 44 74
1 4 7 8 22 37 44 74
Krok 7 1 4 7 8 22 37 44 74
Příklad:
const kol_mas = 10;
var masiv: pole [1..kol_mas] celé číslo;
a, b, k: celé číslo;
začít
writeln ("vstup", kol_mas, "prvky pole");
pro: = 1 až kol_mas do readln (massiv [a]);
pro: = 1 do kol_mas-1 začít
pro b: = a + 1 až kol_mas začít
pokud massiv [a]> massiv [b] začne
k: = masiv [a]; masiv [a]: = masiv [b]; masiv [b]: = k;
konec;
konec;
konec;
writeln ("po třídění");
pro: = 1 k kol_mas do writeln (massiv [a]);
konce.
Příklad:
#include
#include
int hlavní (int argc, char * argv [])
{{
int masiv [8] = {36, 697, 73, 82, 68, 12, 183, 88}, i, ff;
pro (;;) {
ff = 0;
pro (i = 7; i> 0; i -) {
jestliže {massiv [i]
swap (masiv [i], massiv [i-1]);
ff ++;
}}
}}
pokud (ff == 0) se zlomí;
}}
getch (); // zpoždění obrazovky
návrat 0;
}.