• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Sortowanie bąbelkowe

0 głosów
1,469 wizyt
pytanie zadane 15 lipca 2017 w Java przez woks Nowicjusz (230 p.)
Znalazłem taki kod do sortowania bąbelkowego:

public static void bubblesort2(int[] tablica) {
for(int i = 1; i < tablica.length; i++) {
for(int j = 0; j < tablica.length - i; j++) {
if(tablica[j] > tablica[j + 1]) {
swap(tablica, j, j + 1);
}
}
}
}

Wewnętrzna pętla zmniejsza się o 1, ponieważ

* za każdym jej przebiegiem największy element jest na swojej pozycji.

* Nie trzeba z nim zatem porównywać innych liczb.

* @param tablica tablica liczb do posortowania

 

Rzeczywiście działa ale jak sobie to analizuje to mi nie wychodzi na kartce papieru...

Jeżeli mam tablicę 6 elementową i użyję takiej pętli

for(int j = 0; j < tablica.length - i; j++)

To w sytuacji kiedy i będzie równe 3, a tablica ma 6 elementów to "tablica.length - i"  da mi 3 przy jednocześnie tej samej wartości dla zmiennej j - więc wykona się tylko 3 razy, zabraknie 3 kolejnych cykli.

Gdzie robię błąd?

 

Kod zaczerpnięty ze strony algorytm

1 odpowiedź

+2 głosów
odpowiedź 15 lipca 2017 przez mbabane Szeryf (79,260 p.)
wybrane 16 lipca 2017 przez woks
 
Najlepsza

Bo to co masz jest pewna optymalizacja klasycznego sortowania babelkowego. Algorytm ten dziala tak ze z kazda glowna iteracja najwiekszy element przenoszony jest na koniec. Skoro tak to mozna zoptymalizowac to do takiej postaci jak przedstawiasz, a zatem z kazda glowna iteracja mozna pomijac kolejne elementy z konca ciagu, poniewaz one na bank sa posortowane:

Jakis ciag nieposortowany 4, 9, 5, 3, 8,  2, 7

po pierwszej glownej iteracji bedize tak: 4, 5, 3, 8, 2, 7,   9 - jest najwiekszym elementem 

po 2 iteracji: 4, 3, 5, 2, 7, 8, 9  - pogrubione elementy sa juz posortowane i nie trzeba ich sprawdzac tak jak jest to w normalnym sortowaniu babelkowym.

I z kazda kolejna iteracja ten ciag pogrubionych wartosci bedzie wiekszy.

 

Klasyczny algorytm babelkowy masz pod tym linkiem co podales w pierwszej metodzie bubblesort1.

komentarz 16 lipca 2017 przez woks Nowicjusz (230 p.)

To w jaki sposób podana przez Ciebie tablica posortuje się do końca? Tablica siedmioelementowa dan w konsekwencji 4, 3, 2, 5, 7, 8, 9. W czwartej iteracji się już nie wykona, bo "j" będzie wynosić 4 a "tablica.length - i" da nam 7 - 4 = 3. Czyli nie będzie spełniony warunek

for(int j = 0; j < tablica.length - i; j++)

 

bo 4 < 3. Gdzie robię błąd?

komentarz 16 lipca 2017 przez mbabane Szeryf (79,260 p.)
Iteracja nr: 1
4 9 5 3 8 2 7 
4 5 9 3 8 2 7 
4 5 3 9 8 2 7 
4 5 3 8 9 2 7 
4 5 3 8 2 9 7 
4 5 3 8 2 7 9 

Iteracja nr: 2
4 5 3 8 2 7 9 
4 3 5 8 2 7 9 
4 3 5 8 2 7 9 
4 3 5 2 8 7 9 
4 3 5 2 7 8 9 

Iteracja nr: 3
3 4 5 2 7 8 9 
3 4 5 2 7 8 9 
3 4 2 5 7 8 9 
3 4 2 5 7 8 9 

Iteracja nr: 4
3 4 2 5 7 8 9 
3 2 4 5 7 8 9 
3 2 4 5 7 8 9 

Iteracja nr: 5
2 3 4 5 7 8 9 
2 3 4 5 7 8 9 

Iteracja nr: 6
2 3 4 5 7 8 9 

 Posortowane:
2 3 4 5 7 8 9 

Tak bedzie to wygladalo.

komentarz 16 lipca 2017 przez woks Nowicjusz (230 p.)
Dzięki, źle patrzyłem na kod.
komentarz 16 lipca 2017 przez mbabane Szeryf (79,260 p.)
Chodzi po prostu o to ze z kazda iteracja jest o 1 mniej liczb do posortowania.
komentarz 16 lipca 2017 przez obl Maniak (51,300 p.)

mbabane ma rację, możesz to jeszcze zobaczyć na animacji tutaj

Podobne pytania

0 głosów
1 odpowiedź 1,166 wizyt
pytanie zadane 27 lutego 2019 w Java przez mswol Nowicjusz (120 p.)
0 głosów
1 odpowiedź 1,036 wizyt
0 głosów
1 odpowiedź 1,350 wizyt
pytanie zadane 29 czerwca 2018 w Java przez lilianna97 Początkujący (310 p.)

93,742 zapytań

142,680 odpowiedzi

323,299 komentarzy

63,328 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...