Bubble Sort

Het algoritme voor het sorteren van bellen vereist een paar geneste lussen. De buitenste lus moet één keer herhalen voor elk element in de gegevensset (van grootte n), terwijl de binnenste lus n keer herhaalt de eerste keer dat deze wordt ingevoerd, n-1 keer de tweede, enzovoort. Overweeg het doel van elke lus. Zoals hierboven uitgelegd, is het sorteren van bellen zo gestructureerd dat bij elke doorgang door de lijst het op een na grootste element van de gegevens naar de juiste plaats wordt verplaatst. Om alle n elementen op hun juiste plaats te krijgen, moet de buitenste lus daarom n keer worden uitgevoerd.

De binnenste lus wordt uitgevoerd bij elke iteratie van de buitenste lus. Het doel is om het op een na grootste element te plaatsen. De binnenste lus doet daarom het vergelijken en verwisselen van aangrenzende elementen. Om de complexiteit van deze lus te bepalen, berekenen we het aantal vergelijkingen dat gemaakt moet worden. Bij de eerste iteratie van de buitenste lus, terwijl u probeert het grootste element te plaatsen, moeten er n – 1 vergelijkingen zijn: de eerste vergelijking wordt gemaakt tussen het eerste en tweede element, de tweede wordt gemaakt tussen het tweede en derde element, en zo verder totdat de n-1e vergelijking wordt gemaakt tussen het n-1e en het n-de element. Bij de tweede iteratie van de buitenste lus is het niet nodig om het te vergelijken met het laatste element van de lijst, omdat het op de juiste plaats op de vorige doorgang is geplaatst. Daarom vereist de tweede iteratie alleen n-2-vergelijkingen. Dit patroon gaat door tot de voorlaatste iteratie van de buitenste lus wanneer alleen de eerste twee elementen van de lijst ongesorteerd zijn; in dit geval is duidelijk maar één vergelijking nodig. Het totale aantal vergelijkingen is daarom (n – 1) + (n – 2) … (2) + (1) = n (n – 1) / 2 of O (n2).

Het beste geval voor het sorteren van bellen doet zich voor wanneer de lijst al of bijna gesorteerd is. In het geval dat de lijst al is gesorteerd, wordt het sorteren van bellen na de eerste iteratie beëindigd, aangezien er geen swaps zijn gemaakt. Elke keer dat er door de lijst wordt gepasseerd en er niet is geruild, is het zeker dat de lijst is gesorteerd. Het sorteren van bellen is ook efficiënt wanneer een willekeurig element in een gesorteerde lijst moet worden gesorteerd, op voorwaarde dat een nieuw element aan het begin wordt geplaatst en niet aan het einde. Wanneer het aan het begin wordt geplaatst, zal het eenvoudig naar de juiste plaats borrelen en de tweede iteratie door de lijst genereert 0 swaps, waardoor het sorteren wordt beëindigd. Bedenk dat als het willekeurige element aan het einde wordt geplaatst, het sorteren van bellen zijn efficiëntie verliest omdat elk element dat groter is dan het helemaal naar boven moet borrelen.

Het absoluut slechtste geval voor het sorteren van bellen is wanneer de het kleinste element van de lijst bevindt zich aan het grote uiteinde. Omdat bij elke iteratie alleen het grootste ongesorteerde element op de juiste locatie wordt geplaatst, zal wanneer het kleinste element aan het einde is, het elke keer door de lijst moeten worden omgewisseld, en het zal pas bovenaan de lijst komen als alle n iteraties hebben plaatsgevonden. In dit ergste geval zijn n iteraties van n / 2 swaps nodig, dus de volgorde is, nogmaals, n2.

Beste case: nGemiddelde case: n2 Slechtste case: n2

Leave a Reply

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *