Bańka sortowanie z Javą

Bańka sortowanie z Javą
SORT BUBBLE jest najprostszym algorytmem sortowania: Załóżmy, że w rzędzie są elementy, które nie są sortowane. Sort bąbelkowy skanuje wiersz z lewej, zamieniając dowolną sąsiednią parę elementów, które nie są we właściwej kolejności. To skanowanie całego rzędu jest powtarzane wielokrotnie, aż cały rząd zostanie sortowany. Jeśli sortowanie ma się wznosić, wówczas sąsiednia para jest zamieniona, aby element po lewej. Jeśli sortowanie ma być malejące, wówczas sąsiednia para jest zamieniona, aby element po lewej stronie był większy niż element po prawej stronie.

Ilustracja sortowania bańki bez kodu

Rozważ następującą listę znaków niepohamowanych znaków alfabetu:

Q w e r t y u i o p

Ta lista zostanie posortowana w kolejności rosnącej w następujący sposób. W pierwszym skanowaniu Q i W są porównywane; Q jest mniej niż w, więc nie ma zamiany. Mimo to, w pierwszym skanie, W i E są porównywane; E jest mniej niż w, więc jest zamiana. Nowy trzeci element, W, jest porównywany z R; R jest mniej niż w, więc jest zamiana. Nowy czwarty element, W, jest porównywany z T; T jest mniej niż w, więc jest zamiana. Nowy piąty element, W, jest porównywany z Y; W jest mniej niż y i nie ma zamiany. Mimo to, w pierwszym skanie, y jest porównywane z u; U jest mniej niż y, więc jest zamiana. Nowy siódmy element, y, jest porównywany z I; Jestem mniej niż y, a jest zamiana. Nowy ósmy element y jest porównywany z O; O jest mniej niż y, a jest zamiana. Nowy dziewiąty element y jest porównywany z P; P jest mniej niż y, a jest zamiana. Pierwszy skan kończy się tam. Rezultat pierwszego skanu jest,

Q e r t w u i o p y

Zauważ, że największy element jest na końcu po pierwszym skanie. Skanowanie wszystkich powstałych dziesięciu elementów i możliwych zamiany powtarza się ponownie, aby mieć:

E r q t u i o p w y

Zauważ, że następnym największym elementem jest teraz element ostatniego drugiego i nie było potrzeby porównywania go z ostatnim elementem, więc niewiele czasu nie zmarnowałby. Skanowanie wszystkich powstałych dziesięciu elementów i możliwych zamiany powtarza się ponownie, aby mieć:

E q r t i o p u y

Zauważ, że trzeci największy element pod koniec znajduje się teraz na trzeciej pozycji od końca i nie było potrzeby porównywania go z dwoma ostatnimi elementami, i nie trzeba porównywać dwóch ostatnich elementów, a więc trochę małego czasu nie zostałby zmarnowany. Skanowanie wszystkich powstałych dziesięciu elementów i możliwych zamiany powtarza się ponownie, aby mieć:

E q r i o p t u y

Zauważ, że czwarty największy element pod koniec znajduje się teraz na czwartej pozycji od końca i nie było potrzeby porównywania go z ostatnimi trzema elementami, i nie trzeba porównywać trzech ostatnich elementów, a więc trochę czasu by nie zostały zmarnowane. Skanowanie wszystkich powstałych dziesięciu elementów i możliwych zamiany powtarza się ponownie, aby mieć:

E q i o p r t u y

Zauważ, że piąty największy element pod koniec znajduje się teraz na piątej pozycji od końca i nie było potrzeby porównywania go z ostatnimi czterem został zmarnowany. Skanowanie wszystkich powstałych dziesięciu elementów i możliwych zamiany powtarza się ponownie, aby mieć:

E i o p q r t u y

Reszta wyników skanowania jest następująca:

E i o p q r t u y
E i o p q r t u y
E i o p q r t u y
E i o p q r t u y

Zauważ, że dla tych czterech wyników nie miało miejsca sortowanie.

Odwrotność wszystkich powyższych algorytmów można wykonać w celu sortowania.

Optymalizacja bańki

Z podstawowej definicji sortowania bańki, jeśli są n elementy, wówczas będą n pełne skany. Jeden skan to jedna iteracja. Tak więc powyższe dziesięć elementów oznacza dziesięć kompletnych iteracji. Całkowita długość czasu na sortowanie listy (tablica) można zmniejszyć dla wielu nieporozumień. Obejmuje to strategie sortowania bańki. SORT BUBBLE jest zoptymalizowany z dwiema strategiami.

Pierwsza strategia optymalizacji

Zwróć uwagę na powyższe, że po pierwszej pełnej iteracji największy element jest na końcu i byłoby to stratą czasu dostępu do drugiej iteracji. Po drugiej iteracji dwa ostatnie elementy znajdują się na właściwych pozycjach, a czas nie należy zmarnować dostępu do nich w trzeciej iteracji. Oznacza to, że druga iteracja powinna zakończyć się na N-1. Po trzeciej iteracji ostatnie trzy elementy znajdują się na właściwych pozycjach, a czas nie należy zmarnować dostępu do nich w czwartej iteracji. Oznacza to, że trzecia iteracja powinna zakończyć się n-2. Po czwartej iteracji ostatnie cztery elementy znajdują się na właściwych pozycjach, a czas nie należy zmarnować dostępu do nich w piątej iteracji. Oznacza to, że czwarta iteracja powinna zakończyć się na N-3. To trwa.

Z podstawowej definicji sortowania bańki iteracja musi być wykonana n. Jeśli licznik iteracji N jest na I, to iteracja powinna uzyskać dostęp do N - I elementy, aby uniknąć marnowania czasu na końcu tablicy; I z i zaczynając od 0. Muszą więc być dwie Java for Loops: zewnętrzne iteracyjne i itera. Iterowanie tablicy n - i czasy to pierwsza strategia.

Druga strategia optymalizacji

Czy zewnętrzna pętla naprawdę iterowała n? Czy zewnętrzna pętla dla powyższej listy itera się 10 razy? - Nie, ponieważ jego cztery ostatnie iteracje niczego nie zmieniłyby (nie robi to sortowania). Oznacza to, że lista została posortowana, gdy tylko zostanie wykryta; Zewnętrzna pętla powinna pękać, więc sortowanie powinno się zatrzymać. To pozwoli zaoszczędzić więcej czasu. Można to osiągnąć dzięki posiadaniu zmiennej logicznej dla pętli zewnętrznej, która pozostałaby fałszywa w wewnętrznej pętli podczas zamiany zatrzymań.

Kod Java do sortowania bańki

Poniższa klasa ma metodę do sortowania:

klasa Aclass
statyczne bąbelki void (char arr [])
int n = arr.długość;
boolean zamieniony = false;
dla (int i = 0; i < N; i++)
zamieniony = false;
dla (int j = 1; j < N - i; j++)
if (arr [j] < arr[j - 1])
char temp = arr [j];
arr [j] = arr [j - 1];
ARR [j - 1] = temp;
zamieniony = true;


if (zamienione == false) przerwa;


Zwróć uwagę na klimat „j < N - i;” for the inner for-loop, for the first strategy. Note the use of the boolean variable in the outer for-loop and the inner for-loop for the second strategy.

Odpowiednia główna klasa to:

Klasa publiczna THEClass
public static void main (string [] args)
char ar [] = „q”, „w”, „e”, „r”, „t”, „y”, „u”, „i”, „o”, „p”;
Klasa.BubbleSort (AR);
dla (int i = 0; iSystem.na zewnątrz.print (ar [i]); System.na zewnątrz.druk ('');

System.na zewnątrz.println ();

Tablica jest przekazywana odniesieniem do metody bubbleSort () w innej klasie. Więc jego treść jest modyfikowana. Wyjście to:

E i o p q r t u y

Wniosek

Bubble sortuje, zamieniając sąsiednie elementy od początku na koniec listy. Ta procedura jest powtarzana wielokrotnie, aż cała lista nie zostanie całkowicie posortowana. Sortowanie jest albo rosnące lub zstępujące. Sortowanie pęcherzyków należy zoptymalizować, jak wyjaśniono powyżej.