Belsortering wordt niet alleen niet als het meest beschouwddoor de snelle methode sluit het bovendien de lijst met de langzaamste manieren van bestellen. Het heeft echter zijn voordelen. Sorteren op de bellenmethode is dus de meest logische en natuurlijke oplossing voor het probleem, als u de elementen in een bepaalde volgorde moet rangschikken. Een gewone man zal het bijvoorbeeld met de hand precies gebruiken - gewoon door intuïtie.
De naam van de methode is bedacht volgens een analogie metluchtbellen in het water. Dit is een metafoor. Net zoals kleine luchtbellen opstijgen - omdat hun dichtheid groter is dan welke vloeistof dan ook (in dit geval water), dus elk element van de array, hoe kleiner het is in waarde, hoe meer het geleidelijk zijn weg vindt naar het begin van de lijst met getallen.
Bubble sorteren gaat als volgt:
Nog korter, het algoritme van het toekomstige programma kan als volgt worden geschreven:
De eenvoudigste implementatie is als volgt:
procedure Bubble Sort;
begin
fietsen voor goed van start_index voordat end_index;
fietsen voor en van start_index voordat end_index-1;
als massiv [i]> massiv [i + 1] (het eerste element is groter dan het tweede), dan:
(verander waarden op plaatsen);
Het einde
Natuurlijk wordt de eenvoud hier alleen maar ergersituatie: hoe eenvoudiger het algoritme, hoe meer alle gebreken erin voorkomen. De tijdrovend is zelfs voor een kleine reeks te groot (relativiteit speelt een rol: voor een leek lijkt de hoeveelheid tijd klein, maar in het bedrijf van de programmeur telt elke seconde of zelfs milliseconde).
Het vergde een betere implementatie. Bijvoorbeeld, rekening houdend met de uitwisseling van waarden in een array op plaatsen:
procedure Bubble Sort;
begin
sorteren = waar;
cyclus nog sorteren = waar;
sorteren = onwaar
fietsen voor en van start_index voordat end_index-1;
als massiv [i]> massiv [i + 1] (het eerste element is groter dan het tweede), dan:
(wissel elementen);
sorteren = waar; (gaf aan dat de ruil plaatsvond).
Het einde.
Het belangrijkste minpuntje is de duur van het proces. Hoe lang duurt het algoritme voor het sorteren van bellen?
De uitvoeringstijd wordt berekend op basis van het kwadraat van het aantal getallen in de array - het uiteindelijke resultaat is er evenredig mee.
In het ergste geval wordt de array doorlopenzo vaak als er elementen in zitten min één waarde. Dit gebeurt omdat er uiteindelijk maar één element overblijft dat niets te vergelijken heeft, en de laatste doorgang door de array een nutteloze actie wordt.
Daarnaast is een efficiënte sorteermethode eenvoudiguitwisselingen, zoals het ook wordt genoemd, alleen voor kleine arrays. Het zal niet mogelijk zijn om met zijn hulp grote hoeveelheden gegevens te verwerken: het resultaat zijn fouten of een storing in het programma.
Belsortering is heel gemakkelijk te begrijpen.In de curricula van technische universiteiten wordt bij het bestuderen van de ordening van de elementen van een array als eerste geslaagd. De methode is eenvoudig te implementeren, zowel in de programmeertaal Delphi (D (Delphi) als C / C ++ (C / C plus plus), een ongelooflijk eenvoudig algoritme om waarden in de juiste volgorde te rangschikken en in Pascal (Pascal). Belsortering is ideaal voor beginners.
Vanwege tekortkomingen wordt het algoritme niet gebruikt voor buitenschoolse doeleinden.
Het eerste aanzicht van de array is 8 22 4 74 44 37 1 7
Stap 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
Stap 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
Stap 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
Stap 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
Stap 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
Stap 6 1 4 7 8 22 37 44 74
1 4 7 8 22 37 44 74
Stap 7 1 4 7 8 22 37 44 74
Een voorbeeld:
const kol_mas = 10;
var massiv: array [1..kol_mas] van geheel getal;
a, b, k: geheel getal;
beginnen
writeln ("input", kol_mas, "elements of array");
voor a: = 1 tot kol_mas doen readln (massiv [a]);
voor a: = 1 tot kol_mas-1 beginnen
voor b: = a + 1 tot kol_mas beginnen
als massiv [a]> massiv [b] dan beginnen
k: = massiv [a]; massiv [a]: = massiv [b]; massiv [b]: = k;
einde;
einde;
einde;
writeln ("na sorteren");
voor a: = 1 tot kol_mas do writeln (massiv [a]);
einde.
Een voorbeeld:
#include
#include
int main (int argc, char * argv [])
{
int massiv [8] = {36, 697, 73, 82, 68, 12, 183, 88}, i, ff;
voor (;;) {
ff = 0;
voor (i = 7; i> 0; i -) {
if (massiv [i]
ruilen (massiv [i], massiv [i-1]);
ff ++;
}
}
als (ff == 0) pauze;
}
getch (); // schermvertraging
retourneer 0;
}.