BubbleSortierung

PaulDo

Aktives Mitglied
Java:
public class BubbleSortierung {
    public int[] bubblesort(int[] zusortieren) {
        int temp;
        for (int i = 1; i < zusortieren.length; i++) {
            for (int j = 0; j < zusortieren.length - i; j++) {
                if (zusortieren[j] > zusortieren[j + 1]) {
                    temp = zusortieren[j] = zusortieren[j + 1];
                    zusortieren[j + 1] = temp;
                }
            }
        }
        return zusortieren;
    }

    public int[] ausgabe(int [] unsortiert, int [] sortiert) {
     
        for ( int i = 0; i < sortiert.length; i++) {
            System.out.println(sortiert[i] + ", ");
        }
        return sortiert;
    }

}
public class Test {
    public static void main(String[] args) {
        BubbleSortierung bs1 = new BubbleSortierung();
        int [] unsortiert = {20,10,30,5};
        int [] sortiert = bs1.bubblesort(unsortiert);
        bs1.ausgabe(unsortiert,sortiert);

    }

}
Warum gibt der Code 4x die 5 aus statt 5,10,20,30?
 

temi

Top Contributor
Warum gibt der Code 4x die 5 aus statt 5,10,20,30?
Der Code für die Ausgabe ist schon mal suspekt. Du übergibst zwei Arrays als Parameter und eines davon wird im Code nicht verwendet (nebenbei ist auch der Rückgabewert überflüssig, weil du ihn sowieso nicht verwendest).

Besser wäre es ein Array zu übergeben und die Methode zweimal aufzurufen (einmal mit unsortiert und einmal mit sortiert als Parameter).

Dieses: temp = zusortieren[j] = zusortieren[j + 1]; macht den Code unübersichtlich (und sollte bereits deshalb vermieden werden) und tut vermutlich nicht, was du meinst, denn als erstes wird zusortieren[j] = zusortieren[j + 1]; ausgeführt werden.

EDIT: Außerdem sortierst du direkt das übergebene Array und gibst es danach zurück, d.h. unsortiert und sortiert enthalten eine Referenz auf genau das selbe Array und werden demnach auch identische Ausgaben ergeben.
 
Zuletzt bearbeitet:

PaulDo

Aktives Mitglied
Der Code für die Ausgabe ist schon mal suspekt. Du übergibst zwei Arrays als Parameter und eines davon wird im Code nicht verwendet (nebenbei ist auch der Rückgabewert überflüssig, weil du ihn sowieso nicht verwendest).

Besser wäre es ein Array zu übergeben und die Methode zweimal aufzurufen (einmal mit unsortiert und einmal mit sortiert als Parameter).

Dieses: temp = zusortieren[j] = zusortieren[j + 1]; macht den Code unübersichtlich (und sollte bereits deshalb vermieden werden) und tut vermutlich nicht, was du meinst, denn als erstes wird zusortieren[j] = zusortieren[j + 1]; ausgeführt werden.

EDIT: Außerdem sortierst du direkt das übergebene Array und gibst es danach zurück, d.h. unsortiert und sortiert enthalten eine Referenz auf genau das selbe Array und werden demnach auch identische Ausgaben ergeben.
 

PaulDo

Aktives Mitglied
Code:
public class BubbleSort {

     void bubblesort(int[] feld) {
        for (int i = 0; i< feld.length - 1; i++) {
            boolean sorted = true;
            for(int j = 0; j < feld.length -1 -i; j++) {
                if (feld[j] > feld [j +1]) {
                    int temp = feld[j];
                    feld[j] = feld[j + 1];
                    feld[j + 1] = temp;
                    sorted = false;

                }
            }
            if (sorted) {
                break;
            }
        }
        for ( int k = 0; k < feld.length; k++) {
            System.out.println(feld[k]);
        }

 }


public class Test {
    public static void main(String[] args) {
        int [] feld = {10,60,40,80,30};
        BubbleSort b1 = new BubbleSort();
        b1.bubblesort(feld);
        //System.out.println(b1.bubblesort(feld));

    }
}





}
Das ist die Lösung. So funktioniert es. Nur möchte ich den Aufruf des sortierten Arrays in eine extra Methode packen. Kann mir dazu jemand einen Weg zeigen?
 

Jw456

Top Contributor
Du musst eigentlich nur in der Methode deine for Schleife weglassen.
Und die Ausgabe des sortierten Array in der main ausgeben.
 

Jw456

Top Contributor
Java:
public class Test { 
public static void main(String[] args) {
 int [] feld = {10,60,40,80,30};
 BubbleSort b1 = new BubbleSort();
 b1.bubblesort(feld);
 System.out.println(Arrays.toString(feld));
....
 

Oben