Třídění bublin není nejen považováno za nejvícerychlá metoda navíc uzavírá seznam nejpomalejších způsobů objednávání. Má však své výhody. Třídění bublin je tedy nejlogičtějším a nejpřirozenějším řešením problému, pokud potřebujete uspořádat prvky v určitém pořadí. Například obyčejný člověk ho využije - právě intuicí.
Odkud pochází toto neobvyklé jméno?
Název metody byl vynalezen pomocí analogie svzduchové bubliny ve vodě. To je metafora. Stejně jako malé vzduchové bubliny stoupají na vrchol - protože jejich hustota je větší než jakákoli kapalina (v tomto případě voda), tak je každý prvek pole, tím menší je hodnota, tím více se postupně dostává na vrchol seznamu čísel.
Popis algoritmu
Třídění bubliny je následující:
- první průchod: prvky pole čísel jsou vzaty dvěma a jsou také porovnány ve dvojicích. Pokud se v některých dvou prvcích ukáže, že první hodnota je větší než druhá, program si vymění svá místa;
- proto největší číslo jde na konec pole. Zatímco všechny ostatní prvky zůstávají v chaotickém pořadí a vyžadují více třídění;
- druhý průchod je tedy nezbytný: je proveden analogicky s předchozím (již popsaným) a má počet srovnání - minus jeden;
- průkaz číslo tři má o jedno srovnání méně než druhý a o dva méně než první. Atd;
- abychom to shrnuli, každý průchod má (celkové hodnoty v poli, konkrétní číslo) mínus (číslo průchodu) srovnání.
Ještě kratší je, že algoritmus budoucího programu lze zapsat následovně:
- kontroluje se řada čísel, dokud nejsou nalezena jakákoli dvě čísla, a druhé z nich musí být větší než první;
- program zaměňuje prvky pole nesprávně umístěné vůči sobě navzájem.
Pseudokód založený na popsaném algoritmu
Nejjednodušší implementace je následující:
Postup Sortirovka_Puzirkom;
Začátek
cyklus pro j z nachalnii_index dříve konechii_index;
cyklus pro a z nachalnii_index dříve konechii_index-1;
-li masiv [i]> masiv [i + 1] (první prvek je větší než druhý), pak:
(změňte hodnoty v místech);
Konec
Samozřejmě zde jednoduchost jen umocňujesituace: čím je algoritmus jednodušší, tím více se v něm objevují všechny nedostatky. Náklady na čas jsou příliš vysoké i pro malé pole (zde vstupuje do hry relativita: pro laika se může zdát, že množství času je malé, ale v práci programátora se počítá každá sekunda nebo dokonce milisekunda).
Byla vyžadována lepší implementace. Například s přihlédnutím k výměně hodnot v poli podle míst:
Postup Sortirovka_Puzirkom;
Začátek
sortirovka = pravda;
cyklus nazdar sortirovka = pravda;
sortirovka = nepravda;
cyklus pro a z nachalnii_index dříve konechii_index-1;
-li masiv [i]> masiv [i + 1] (první prvek je větší než druhý), pak:
(prohodíme prvky na místech);
sortirovka = pravda; (označeno, že výměna byla provedena).
Konec.
Nevýhody metody
Hlavní nevýhodou je doba trvání procesu. Jak dlouho trvá algoritmus řazení bublin?
Doba provedení se vypočítá ze čtverce počtu čísel v poli - konečný výsledek je mu úměrný.
V nejhorším případě bude pole procházenotolikrát, kolik je prvků minus jedna hodnota. Důvodem je, že na konci zbývá pouze jeden prvek, se kterým není co porovnávat, a poslední průchod polem se stává zbytečnou akcí.
Kromě toho je metoda třídění jednoduchásměny, jak se také nazývá, pouze za malá pole. S jeho pomocí nebude možné zpracovat velké množství dat: výsledkem budou buď chyby, nebo selhání programu.
Výhody
Řazení bublin je velmi snadné pochopit.V učebních osnovách technických univerzit při studiu řazení prvků pole prochází jako první. Metodu lze snadno implementovat jak v programovacím jazyce Delphi (D (Delphi), tak v C / C ++ (C / C plus plus), což je neuvěřitelně jednoduchý algoritmus pro uspořádání hodnot ve správném pořadí, a v Pascalu. sort je ideální pro začátečníky.
Vzhledem k nedostatkům není algoritmus používán pro mimoškolní účely.
Jasný princip třídění
Počáteční pohled na pole 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 řazení bublin v Pascalu
Příklad:
konst kol_mas = 10;
var massiv: pole [1..kol_mas] celého čísla;
a, b, k: celé číslo;
začít
writeeln ("vstup", kol_mas, "prvky pole");
pro a: = 1 až kol_mas do readln (massiv [a]);
pro a: = 1 až kol_mas-1 začněte
pro b: = a + 1 až kol_mas začínají
pokud massiv [a]> massiv [b], pak začněte
k: = masiv [a]; massiv [a]: = massiv [b]; massiv [b]: = k;
konec;
konec;
konec;
writeeln ("po třídění");
pro a: = 1 až kol_mas do writeeln (massiv [a]);
konec.
Příklad třídění bublin v C (C)
Příklad:
#zahrnout
#zahrnout
int main (int argc, char * argv [])
{{
int massiv [8] = {36, 697, 73, 82, 68, 12, 183, 88}, i, ff;
pro (;;) {
ff = 0;
pro (i = 7; i> 0; i -) {
if (massiv [i] <massiv [i-1]) {
swap (massiv [i], massiv [i-1]);
ff ++;
}}
}}
if (ff == 0) break;
}}
getch (); // zpoždění obrazovky
návrat 0;
}.