/ / Třídění metod při programování: třídění podle "bubliny"

Třídění metod v programování: třídění podle "bubliny"

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.

Odkud pochází toto neobvyklé jméno?

třídění bublin

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.

Popis algoritmu

Třídění podle bubliny se provádí následovně:

  • první průchod: prvky pole čísel se odeberou ve dvou a porovnávají se také ve dvojicích. Pokud v některých dvou prvcích je první hodnota větší než druhá, program provádí jejich výměnu míst;
  • proto je největší počet na konci pole. Zatímco všechny ostatní prvky zůstávají v chaotickém pořádku a vyžadují další třídění;
  • proto je potřeba druhý průchod: je vyroben analogicky s předchozím (již popsaným) a má řadu srovnání - mínus jeden;
  • při průchodu jsou srovnávání číslo tři menší než druhá a dvě než první. A tak dále;
  • Zkusme shrnout, že každý průkaz má (v poli, konkrétní číslo) mínus (počet průchodů) srovnání.

třídění bublin

Dokonce i kratší algoritmus budoucího programu lze psát následovně:

  • pole čísel je kontrolováno, dokud nenaleznou dvě čísla, z nichž druhá musí být větší než první;
  • které jsou nesprávně umístěny ve vztahu k ostatním prvkům pole, program provádí swapy.

Pseudokód založený na popsaném algoritmu

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.

Nevýhody metody

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.

pascal třídící bubliny

Výhody

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.

Jasná zásada třídění

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 třídění bubliny v Pascalu

algoritmus třídění bublin

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 třídící bubliny v C (C)

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;

}.

Líbí se:
0
jo