Sortering med boble betragtes ikke kun som mestved en hurtig metode lukker den endvidere listen over de langsommere måder at bestille på. Men det har også sine fordele. Så sortering med boblen er den mest logiske og naturlige løsning på problemet, hvis du vil arrangere elementerne i en bestemt rækkefølge. En almindelig person vil for eksempel bruge den for hånd, blot ved intuition.
Navnet på metoden blev opfundet under anvendelse af en analogi medluftbobler i vandet. Dette er en metafor. Ligesom små luftbobler stiger til toppen - fordi deres tæthed er større end nogen væske (i dette tilfælde - vand), og hvert element i arrayet, jo mindre er det i værdi, jo mere går det gradvist til begyndelsen af listen over tal.
Sortering efter boble udføres som følger:
Endnu kortere algoritme for det fremtidige program kan skrives som følger:
Den enkleste gennemførelse er som følger:
procedure Sortirovka_Puzirkom;
Begyndelsen
cyklus for j fra nachalnii_index op til konechii_index;
cyklus for jeg fra nachalnii_index op til konechii_index-1;
hvis massiv [i]> massiv [i + 1] (det første element er større end det andet), så:
(ændre værdierne på steder);
Enden
Selvfølgelig forværrer simpelheden kun herSituation: Jo enklere algoritmen er, desto mere viser det alle manglerne. Investering forholdet mellem tiden er for stor, selv for en lille array (her kommer i relativitet: Den tid, for lægmand kan synes lille, men i virkeligheden en programmør hvert sekund eller endda millisekund tæller).
Det tog en bedre gennemførelse. For eksempel, under hensyntagen til udveksling af værdier i arrayet på nogle steder:
procedure Sortirovka_Puzirkom;
Begyndelsen
sortirovka = true;
cyklus indtil sortirovka = true;
sortirovka = false;
cyklus for jeg fra nachalnii_index op til konechii_index-1;
hvis massiv [i]> massiv [i + 1] (det første element er større end det andet), så:
(vi ændrer elementerne på steder);
sortirovka = true; (angivet at udvekslingen blev foretaget).
Enden.
Den største ulempe er procesens varighed. Hvor lang tid virker boblesortalgoritmen?
Eksekveringstiden beregnes ud fra kvadratet af antallet af tal i arrayet - det endelige resultat er proportional med det.
I værste fald vil arrayet blive beståetså mange gange som der er elementer i det, minus en værdi. Dette skyldes, at der i sidste ende kun er et element, der ikke har noget at sammenligne med, og det sidste passerer gennem arrayet bliver en ubrugelig handling.
Desuden er metoden til sortering enkeludvekslinger, som det også kaldes, kun for arrays af lille størrelse. Store mængder data kan ikke behandles ved hjælp af det: Resultatet vil være enten fejl eller et programs fejl.
Sortering af en boble er meget enkel at forstå. I læseplanerne for tekniske universiteter, når man studerer rækkefølgen af elementer i et array, passerer den først. Metoden er let at gennemføre både sproget Delphi programmering (L (Delphi), og C / C ++ (C / C plus plus), en utrolig enkle værdier for placering algoritme i den rigtige rækkefølge og på Pascal (Pa). Boblesortering er ideelle for begyndere.
På grund af mangler er algoritmen ikke brugt til ekstra-curricular formål.
Den oprindelige visning af arrayet er 8 22 4 74 44 37 1 7
Trin 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
Trin 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
Trin 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
Trin 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
Trin 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
Trin 6 1 4 7 8 22 37 44 74
1 4 7 8 22 37 44 74
Trin 7 1 4 7 8 22 37 44 74
eksempel:
const kol_mas = 10;
var massiv: array [1..kol_mas] af heltal;
a, b, k: heltal;
begynde
writeln ("input", kol_mas, "elementer i array");
for a: = 1 til kol_mas gør readln (massiv [a]);
for a: = 1 til kol_mas-1 begynder
for b: = a + 1 til kol_mas begynder
hvis massiv [a]> massiv [b] så begynder
k: = massiv [a]; massiv [a]: = massiv [b]; massiv [b]: = k;
ende;
ende;
ende;
writeln ("efter sort");
for a: = 1 til kol_mas gør writeln (massiv [a]);
ende.
eksempel:
#include
#include
int main (int argc, char * argv [])
{
int massiv [8] = {36, 697, 73, 82, 68, 12, 183, 88}, i, ff;
for (;;) {
ff = 0;
for (i = 7; i> 0; i -) {
hvis (massiv [i] <massiv [i-1]) {
swap (massiv [i], massiv [i-1]);
ff ++;
}
}
hvis (ff == 0) bryde;
}
getch (); // skærmforsinkelse
returnere 0;
}.
</ p>