Dlaczego jest żle - sort

0
public class SortApp{
    public static void main(String[] args) {
	int swap;
	int tab[] = {4,3,2,5,6,78,43,23,78};
	for (int i = 0; i < tab.length-1; i++){
	    for(int j = 0; j < tab.length-1; j++){
		if(tab[j] > tab[j+1]){
		    swap = tab[j];
		    tab[j] = tab[j+1];
		    tab[j+1] = swap;
		    System.out.print(tab[j]+", ");
		}
	    }
	}
    }
} 

Próbowałem przerobić ten kod na wszystkie strony ale tak jakby pętla się za mało razy wykonuje czy co?
Dlaczego nie działa?

0

Ale co dokładnie się dzieje? I spróbuj wyświetlić tablicę po sortowaniu (po pętlach). Sprawdzałem u siebie w C++ i po sortowaniu wyświetla się dobrze, więc jeżeli nie to to nie wiem co.

0

Masz posortować tablicę, czy napisać kod sortujący? Prościej jest

Arrays.sort(tab);
0

Takie coś mam.
Output:

3, 2, 43, 23, 2, 23, BUILD SUCCESSFUL (total time: 0 seconds) 
0

Mówiłem, wyświetl tablicę po sortowaniu, bo wydaje mi się, że jak pętlę lecą to ty wyświetlasz, a tu jeszcze musi przejść kilka, żeby do końca posortować. Czyli faktycznie nie wyświetlasz posortowanej, ale w trakcie.

0

Obejrzyj kod i odpowiedz sobie na pytanie: Gdzie wyświetlam posortowaną tablicę?
Dodaj po sortowaniu

System.out.println(Arrays.toString(tab));
0

@Xeo
Jeśli o to Ci chodzi to:

public class SortApp {
    public static void main(String[] args) {
	int swap,j = 0,i;
	int tab[] = {4, 3, 2, 5, 6, 78, 43, 23, 78};
	for (i = 0; i < tab.length-1; i++){
	for (j = 0; j < tab.length - 1; j++) {
	    if (tab[j] > tab[j + 1]) {
		swap = tab[j];
		tab[j] = tab[j + 1];
		tab[j + 1] = swap;
		
		}
	    }

	}
        System.out.print(tab[j] + ", ");
    }
} 

Output:

78, BUILD SUCCESSFUL (total time: 0 seconds) 

@bo
Chcę zrozumieć dlaczego to nie działa - gdybym tylko chciał posortować do programu zrobiłbym tak jak mówisz.

1

Ale nie jeden element! Całą tablicę po sortowaniu wyświetl, jak to się tam w Javie robi w pętli?
Na moje oko:

public class SortApp {
    public static void main(String[] args) {
        int swap,j = 0,i;
        int tab[] = {4, 3, 2, 5, 6, 78, 43, 23, 78};
        for (i = 0; i < tab.length -1; i++){
        for (j = 0; j < tab.length - 1; j++) {
            if (tab[j] > tab[j + 1]) {
                swap = tab[j];
                tab[j] = tab[j + 1];
                tab[j + 1] = swap;
 
                }
            }
 
        }
        for (int k = 0; k < tab.length - 1; k++) {
            System.out.print(tab[k] + ", ");
        }
    }
}
0

Proszę:

public class SortApp {
    public static void main(String[] args) {
	int swap,j = 0,i;
	int tab[] = {4, 3, 2, 5, 6, 78, 43, 23, 78};
	for (i = 0; i < tab.length-1; i++){
	for (j = 0; j < tab.length - 1; j++) {
	    if (tab[j] > tab[j + 1]) {
		swap = tab[j];
		tab[j] = tab[j + 1];
		tab[j + 1] = swap;
		
		}
	    }

	}
	System.out.print(Arrays.toString(tab)+"\n");
	for(i = 0; i <= tab.length; i++)
	    System.out.print(tab[j]+", ");
    }
} 

Metoda 'bo':

[2, 3, 4, 5, 6, 23, 43, 78, 78] 

Metoda Xeo:)

78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 
0
 for(i = 0; i <= tab.length; i++)
            System.out.print(tab[j]+", ");

Fajnie, ze wewnatrz petli uzywasz jako index zmiennej, ktora zdefiniowales w petli ;)

1
        System.out.print(Arrays.toString(tab)+"\n");

Metoda 'bo':

[2, 3, 4, 5, 6, 23, 43, 78, 78]

Czyli posortowało! Magia.

        for(i = 0; i <= tab.length; i++)
            System.out.print(tab[j]+", ");

Metoda Xeo:)

78, 78, 78, 78, 78, 78, 78, 78, 78, 78,

Czyli wyświetlasz cały czas j-oty element! To nie jest to co xeo545x39 zaproponował.

0

Dziękuję - rozwiązaniem jest metoda Xeo której nie zrozumiałem i podpowiedż (chyba Aurel | Anonim) ale dzięki temu zrozumiałem ocb a właśnie to chciałem zrozumieć:

for(int k = 0; k < tab.length; k++)
	    System.out.print(tab[k]+", "); 

Output:
2, 3, 4, 5, 6, 23, 43, 78, 78, BUILD SUCCESSFUL

Pozdrawiam i dziękuję wszystkim za aktywność;)

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