Boblesortering betragtes ikke kun som den mesthurtig metode, desuden lukker den listen over de langsomste bestillingsmetoder. Det har dog også sine fordele. Så sortering efter boblemetoden er den mest logiske og naturlige løsning på problemet, hvis du har brug for at arrangere elementerne i en bestemt rækkefølge. En almindelig person bruger for eksempel det manuelt - bare ved intuition.
Hvor kom dette usædvanlige navn fra?
Navnet på metoden blev opfundet ved hjælp af en analogi medluftbobler i vandet. Dette er en metafor. Ligesom små luftbobler stiger opad - trods alt er dens densitet større end nogen væske (i dette tilfælde vand), så hvert element i arrayet, jo mindre det er i værdi, jo mere går det gradvist til begyndelsen af listen over tal.
Algoritme Beskrivelse
Boblesortering udføres som følger:
- første gennemgang: elementerne i matrixen af tal tages af to og sammenlignes også parvis. Hvis den første værdi i et hvilket som helst to elementer er større end det andet, udveksler programmet deres pladser;
- derfor ender det største antal i slutningen af arrayet. Mens alle andre elementer forbliver, som de var, i en kaotisk rækkefølge og stadig kræver sortering;
- derfor er det andet pass nødvendigt: det er lavet analogt med det foregående (allerede beskrevet) og har antallet af sammenligninger - minus en;
- bestået nummer tre har en færre sammenligning end den anden og to mindre end den første. Etc;
- For at opsummere har hvert pass (samlede værdier i arrayet, et specifikt antal) minus (pass number) sammenligninger.
Endnu kortere kan algoritmen for det fremtidige program skrives som følger:
- et array med tal kontrolleres, indtil der findes to numre, og det andet af dem skal være større end det første;
- programmet udveksler elementerne i arrayet forkert placeret i forhold til hinanden.
Pseudokode baseret på den beskrevne algoritme
Den enkleste implementering er som følger:
procedure Sortirovka_Puzirkom;
Begyndelsen
cykle for godt fra nachalnii_index til konechii_index;
cykle for og fra nachalnii_index til konechii_index-1;
hvis en massiv [i]> massiv [i + 1] (det første element er større end det andet), derefter:
(ændre værdierne steder);
Slutningen
Selvfølgelig forværres enkelhed her kunsituation: jo enklere algoritmen, jo mere vises alle mangler i den. Tidsforbruget er for højt selv for et lille array (her kommer relativitet i spil: for en lægmand kan tiden virke lille, men i en programmørs forretning tæller hvert sekund eller endda en millisekund).
En bedre implementering var påkrævet. For eksempel under hensyntagen til udveksling af værdier i matrixen steder:
procedure Sortirovka_Puzirkom;
Begyndelsen
sortirovka = sandt;
cyklus farvel sortirovka = sandt;
sortirovka = falsk;
cykle for og fra nachalnii_index til konechii_index-1;
hvis en massiv [i]> massiv [i + 1] (det første element er større end det andet), derefter:
(bytte elementer steder)
sortirovka = sandt; (angav, at udvekslingen blev foretaget).
Slutningen.
Ulemper ved metoden
Den største ulempe er varigheden af processen. Hvor lang tid tager algoritmen til sortering af boble?
Udførelsestiden beregnes ud fra kvadratet af antallet af tal i arrayet - det endelige resultat er proportionalt med det.
I værste fald vil arrayet blive krydsetså mange gange som der er elementer minus en værdi. Dette skyldes, at der i sidste ende kun er et element tilbage med intet at sammenligne med, og den sidste passage gennem arrayet bliver en ubrugelig handling.
Desuden er metoden til sortering efter enkeludvekslinger, som det også kaldes, kun for små arrays. Store mængder data kan ikke behandles med dens hjælp: resultatet bliver enten fejl eller en programfejl.
værdighed
Boblesortering er meget let at forstå. I læseplanerne for tekniske universiteter er det det første skridt, når man studerer rækkefølgen af matrixelementer. Metoden er nem at implementere i både Delphi-programmeringssprog (D (Delphi) og C / C ++ (C / C plus plus), en utrolig enkel algoritme til at arrangere værdier i den rigtige rækkefølge og i Pascal. Boblesortering er ideel til begyndere.
På grund af mangler bruges algoritmen ikke til fritidsformål.
Tydeligt sorteringsprincip
Indledende visning af arrayet 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 på boblesortering i Pascal
eksempel:
const kol_mas = 10;
var massiv: array [1..kol_mas] af heltal;
a, b, k: heltal;
begynde
writeln ("input", kol_mas, "elements of array");
for a: = 1 til kol_mas do readln (massiv [a]);
for a: = 1 til kol_mas-1 skal du begynde
for b: = a + 1 til kol_mas begynder
hvis massiv [a]> massiv [b] så start
k: = massiv [a]; massiv [a]: = massiv [b]; massiv [b]: = k;
ende;
ende;
ende;
writeln ("efter sortering");
for a: = 1 til kol_mas do writeln (massiv [a]);
ende.
Eksempel på boblesortering i C (C)
eksempel:
#omfatte
#omfatte
int main (int argc, char * argv [])
{
int massiv [8] = {36, 697, 73, 82, 68, 12, 183, 88}, i, ff;
til (;;) {
ff = 0;
for (i = 7; i> 0; i -) {
hvis (massiv [i] <massiv [i-1]) {
swap (massiv [i], massiv [i-1]);
ff ++;
}
}
hvis (ff == 0) pause;
}
getch (); // skærmforsinkelse
returnere 0;
}.