technik w programowaniu Sortowanie: sortowanie „bańki”
Sortowanie bąbelkowe jest nie tylko uważana za najszybszą metodę, ponadto zamyka listę najwolniejszych sposobów zorganizowania. Ma jednak swoje zalety. Zatem metoda sortowania bańki – najbardziej, że nie jest naturalnym i logicznym rozwiązaniem problemu, jeśli chcesz zorganizować elementy w określonej kolejności. Zwykłym człowiekiem ręcznie, na przykład, że będą z nich korzystać – po prostu intuicją.
Skąd takie nietypowe imię?
Nazwa metody wymyślił, stosując analogię pęcherzyków powietrza w wodzie. Jest to metafora. Podobnie jak małe pęcherzyki powietrza w górę – ponieważ ich gęstość jest większa niż płynu (w tym przypadku – z wody), a każdy element tablicy, tym mniejsza jest wartość, tym bardziej stopniowy sposób na szczycie listy numerów.
Opis algorytmu
bubble sort odbywa się w następujący sposób:
- Pierwszy przebieg: elementy macierzy liczb zajmuje dwóch par, jak również w porównaniu. Jeśli niektóre elementy zespołu pierwszej wartości dwa-man jest większa niż druga, program sprawia im miejsca wymiany;
- W związku z tym największą liczbę pomyłek koniec tablicy. Podczas gdy pozostałe elementy pozostają niezmienione w sposób chaotyczny i wymagają bardziej sortowania;
- a zatem wymagają drugą przepustkę: jest ona wytwarzana przez analogię z poprzednim (już opisane) i posiada szereg porównań – minus jeden;
- pod numerem pasażu trzy porównanie, jeden mniej niż sekundę, a dwa, niż pierwszy. I tak dalej;
- Podsumowując, aby każdy fragment ma (wszystkie wartości w tablicy konkretny numer) minus (liczby pasaży) porównań.
Nawet krótszy algorytm programu można zapisać jako:
- tablicę liczb sprawdza się ile występują dowolne dwie liczby, drugi z nich związana jest większa niż w pierwszej kolejności;
- nieprawidłowo ustawione w stosunku do siebie elementami zamiany oprogramowania tablicy.
Pseudokod na podstawie algorytmu opisanego
Najprostsza realizacja odbywa się w następujący sposób:
Procedura Sortirovka_Puzirkom;
początek
cykl dla j od nachalnii_index do konechii_index;
cykl I z nachalnii_index do konechii_index-1;
Jeśli Massiv [j]> Massiv [i + 1] (pierwszy element większe niż drugie), a następnie:
(Zmiana miejsca wartości);
koniec
Oczywiście, ta prostota tylko pogarsza sytuację: prostsze algorytm, tym bardziej przejawia wszystkie wady. Stosunek inwestycja czasu jest zbyt wielka nawet dla małej tablicy (tutaj przychodzi względności: Ilość czasu dla laika może wydawać się niewielka, ale w rzeczywistości programista co drugi lub nawet milisekunda impulsy).
Zajęło lepszą realizację. Na przykład, biorąc pod uwagę wymianę wartości w miejscach tablicy:
Procedura Sortirovka_Puzirkom;
początek
sortirovka = prawdziwa;
Cykl aż sortirovka = TRUE;
sortirovka = fałszywe;
cykl I z nachalnii_index do konechii_index-1;
Jeśli Massiv [j]> Massiv [i + 1] (pierwszy element większe niż drugie), a następnie:
(Zmiana elementów miejsca);
sortirovka = prawdziwa; (Zidentyfikowany że wymiana została dokonana).
Koniec.
ograniczenia
Główną wadą – czas trwania całego procesu. Ile czasu jest wykonywany algorytm sortowania bańka?
Ołów czasie oblicza się liczbę numerów kwadratowy w tablicy – końcowy rezultat jest proporcjonalny.
Jeśli najgorszy przypadek tablica przepuszcza tyle razy, ile to ma elementy minus jedna wartość. Dzieje się tak dlatego, że w końcu jest tylko jednym z elementów, które nie mają nic do porównania, a ostatni przechodzi przez działanie tablicy staje się bezużyteczny.
Ponadto skuteczna metoda sortowania prostą wymianę, jak to nazywa, tylko dla tablic o niewielkich rozmiarach. Duże ilości danych za pomocą procesu nie będzie działać: wynik będzie albo błąd lub awaria programu.
godność
Sortowanie bąbelkowe jest bardzo łatwy do zrozumienia. Programy nauczania uczelni technicznych w badaniu elementów uporządkowania swojej tablicy przejść w pierwszej kolejności. Metoda ta jest łatwa do wdrożenia zarówno języka Delphi programowania (L (Delphi) oraz C / C ++ (C / C plus plus), niezwykle prostych wartości algorytmu lokalizacji w odpowiedniej kolejności i na Pascal (Pascal). Bubble sortowania jest idealny dla początkujących.
Z powodu wad algorytmu nie jest wykorzystywany w celach pozalekcyjnych.
Zasada wizualny sortowania
Widoku początkowego tablicy 8 22 4 74 44 37 1 7
Etap 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
Etap 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
Etap 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
Etap 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
Etap 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
Etap 6 1 4 7 8 22 37 44 74
1 4 7 8 22 37 44 74
Etap 7 1 4 7 8 22 37 44 74
Przykładem bubble sort w Pascalu
Przykład:
const kol_mas = 10;
var Massiv: tablica [1..kol_mas] o całkowitej;
A, B, K: całkowita;
rozpocząć
WriteLn ( 'wejście' kol_mas, 'elementów macierzy');
dla: = 1 kol_mas do readln (Massiv [a ]);
dla: = 1 do kol_mas-1 zrobić rozpocząć
dla B: = a + 1, aby nie rozpocząć kol_mas
Jeśli Massiv [a]> Massiv [ b], a następnie rozpocząć
k: = Massiv [A]; Massiv [a] = Massiv [ b]; Massiv [b] = k;
kończyć;
kończyć;
kończyć;
WriteLn ( 'po rodzaju');
dla: = 1 kol_mas do writeln Massiv ([a ]);
end.
Przykład bańki sortowania w języku C (C)
Przykład:
#include
#include
Int główne (Int ARGC char * argv [])
{
Int Massiv [8] = {36, 697, 73, 82, 68, 12, 183, 88}, i, i następne;
for (;;) {
ff = 0;
for (i = 7: i> 0; i -) {
if (Massiv [b] <Massiv [I- 1]) {
Zmienne (Massiv [i] Massiv [I- 1]);
ff ++;
}
}
jeśli (FF == 0) break;
}
getch (); // opóźnienie wyświetlacz
return 0;
}.