SITE SØGNING

Sorteringsmetoder i programmering: sortering med "boble"

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.

Hvor kom dette usædvanlige navn fra?

boblesortering

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.

Beskrivelse af algoritmen

Sortering efter boble udføres som følger:

  • det første pass: elementerne i arrayet af tal er taget i to og sammenlignes også parvis. Hvis i nogle af elementerne den første værdi er større end den anden, gør programmet deres udveksling af steder;
  • Derfor er det største antal i slutningen af ​​arrayet. Mens alle de andre elementer forbliver som kaotisk og kræver yderligere sortering;
  • Derfor kræves et andet pass: det er fremstillet analogt med den tidligere (allerede beskrevet) og har en række sammenligninger - minus en;
  • ved passet er nummer tre sammenligninger en mindre end den anden og to, end den første. Og så videre;
  • Lad os opsummere, at hvert pass har (i arrayet, et specifikt tal) minus (antal passerer) sammenligninger.

boblesortering

Endnu kortere algoritme for det fremtidige program kan skrives som følger:

  • antallet af numre er tjekket, indtil to tal er fundet, hvoraf den anden skal være større end den første;
  • forkert placeret i forhold til hinanden i arrayet, skifter programmet.

Pseudokode baseret på den beskrevne algoritme

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.

Ulemper ved metoden

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.

pascal sorteringsboble

værdighed

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.

Et klart princip om sortering

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 på sortering af en boble i Pascal

boble sorteringsalgoritme

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 på sortering med en boble i C (C)

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>
  • Evaluering: