Sortowanie bąbelkowe - problem ze zrozumieniem kodu

0

Witam
Kod działa poprawnie, jednak nie rozumiem momentu, kiedy jest warunek logiczny fixed. Skoro pętla for wykonuje się 4 razy i pod koniec pętli mamy tablice {5,3,2,8,9}, która nie jest poprawnie posortowana, natomiast na koniec ifa zmieniamy fixed na true; To po pierwszym przejściu pętli while powinien się zerwać, bo fixed = true.
Może ktoś wytłumaczyć jak zmienia się wartość fixed w kolejnych liniach kodu.

 public static void main(String[] args) {
            int number[] = {8, 5, 3, 2, 9};
            int temp;
            boolean fixed = true;
            while (fixed) {
                fixed = false;

                for (int i = 0; i < number.length - 1; i++) {
                    if (number[i] > number[i + 1]) {
                        //if  8 > 5
                        temp = number[i + 1];
                        //store 5 in temp
                        number[i + 1] = number[i];
//put 8 in 5 place tablica w tej lini kodu wyglada tak: {8,8,3,2,9};
                        number[i] = temp;
//teraz tablica wyglada tak: {5,8,3,2,9}
                        fixed = true;
                    }
//po wykonaniu petli {5,3,2,8,9}
                }
            }
            for(int i=0; i<number.length; i++){
                System.out.println(number[i]);
            }
    
        }
0

Nie kumam pytania. Jeżeli następna liczba jest większa niż aktualna(wybrana czyli "i"). Wtedy fixed zmiana się na true czyli przynajmniej jedna liczba nie jest na swoim miejscu. Pętla(while) musi być kontynuowana(program zakończy się jak wszystkie liczby będą posortowane czyli ten if już się nie wykona i fixed pozostanie false.

0

To dlaczego warunek fixed = false; jest przed pętlą for?

0
konserwa napisał(a):

Nie kumam pytania. Jeżeli następna liczba jest większa niż aktualna(wybrana czyli "i"). Wtedy fixed zmiana się na true czyli przynajmniej jedna liczba nie jest na swoim miejscu. Pętla(while) musi być kontynuowana(program zakończy się jak wszystkie liczby będą posortowane czyli ten if już się nie wykona i fixed pozostanie false.
while.jpg
Nie rozumiem, czemu nie sortuje tablicy w pierwszym wypadku, kiedy warunek fixed=false; daje za pętlą for.

1 użytkowników online, w tym zalogowanych: 0, gości: 1