Java Sortieren BubbleSort?

1 Antwort

  • In der Methode Swap fehlt der Datentyp von i
  • Die for-Schleife ergibt keinen Sinn. Soll sie vorwärts oder rückwärts über das Array iterieren?
  • Der Inhalt der For-Schleife ergibt keinen Sinn. Was versuchst du, zu erreichen?
Woher ich das weiß:Studium / Ausbildung – Informatikstudium
Thomlol 
Fragesteller
 21.01.2020, 18:19

Sie soll beim zehnten Wert beginnen und dann rückwärts laufen und was ist gemeint es fehlt der Datentyp i und wieso ergibt sie keinen Sinn?

0
VeryBestAnswers  21.01.2020, 18:29
@Thomlol

Da steht:

public void Swap(i)

Das ist in Java nicht erlaubt. Bei Parametern muss der Datentyp angegeben werden.

Um rückwärts zu laufen, muss die Bedingung anders sein. Ich nehme an, du willst beim Index 0 aufhören:

for (int i = 10; i >= 0; --i)

Ich verstehe aber nicht, warum du nur über die ersten 10 Elemente iterierst. Willst du nicht das gesamte Array sortieren?

Die if-Bedingung ist leer, hat also keinen Effekt. Ich vermute, das Vertauschen soll innerhalb des if-Blocks stehen.

Und warum rufst du in der for-Schleife rekursiv die Funktion Swap auf?

0
Thomlol 
Fragesteller
 21.01.2020, 18:49
@VeryBestAnswers

Okay brauche ich der Methode Swap dann nichts übergeben? Das Vertauschen habe ich jetzt in den if-Block geschrieben. Gibt es sonst noch was?

0
VeryBestAnswers  21.01.2020, 18:56
@Thomlol
brauche ich der Methode Swap dann nichts übergeben?

Das kommt darauf an, was du mit der Methode bezweckst!

Der Name "swap" suggeriert, dass die Methode lediglich zwei Elemente vertauscht. Ich war daher relativ verwirrt, darin eine for-Schleife zu sehen.

Bitte überleg dir erst mal, was die Methode machen soll, und entscheide dann, welche Parameter du übergeben willst.

0
Thomlol 
Fragesteller
 21.01.2020, 18:57
@VeryBestAnswers

Die Methode soll die ersten 10 Stellen dieses Array richtig sortieren, dass die Zahlen in richtiger Reihenfolge stehen.

0
Thomlol 
Fragesteller
 21.01.2020, 19:12
@VeryBestAnswers

Wie gesagt das ist so vorgegeben. Verstehst du denn zumindest, was mein Ziel ist? Ich komme momentan so nicht ganz weiter. So sieht meine Methode momentan aus

public void Swap()
    {
        int[]dummy=st.ausgabe();
        int temp = 0;
        for(int i=10;i<=0;i--) {
            if(dummy[i] <= dummy[i+1]) {
                temp = dummy[i];
                dummy[i]=dummy[i+1];
                dummy[i+1]=temp;
            }
            jta2.append(" "+dummy[i]+'n');
        }
    }
0
VeryBestAnswers  21.01.2020, 19:23
@Thomlol
for(int i=10;i<=0;i--) {

10 ist größer als 0 d.h., die Bedingung sollte eher i >= 0 sein.

Im Moment iterierst du übrigens über 12 Elemente. Das Element mit Index 10 ist das 11. Element (da wir bei 0 anfangen zu zählen), und mit dummy[i + 1] greifst du auch auf das dahinter zu.

Um nur über die ersten 10 Elemente zu iterieren:

for (int i = 8; i >= 0; i--) {

Das nächste Problem ist, dass du Bubble Sort nicht verstanden hast. Wenn du nur einmal über die Elemente iterierst, sind diese noch nicht sortiert. Sortiert sind sie erst, wenn du das ganze 9 mal wiederholst:

for (int n = 0; n < 9; n++) {
    for (int i = 8; i >= 0; i--) {
        if (dummy[i] <= dummy[i + 1]) {
            temp = dummy[i];
            dummy[i] = dummy[i + 1];
            dummy[i + 1] = temp;
        }
    }
}

Die Ausgabe kannst du erst ganz am Ende machen:

for (int i = 9; i >= 0; i--)
    jta2.append(" " + dummy[i] + 'n');

Soll nach jeder Zahl wirklich ein 'n' ausgegeben werden, oder ist ein Zeilenumbruch ('\n') gemeint?

0
Thomlol 
Fragesteller
 21.01.2020, 19:47
@VeryBestAnswers

Es soll der Zeilenbruch sein und könntest du mir vlt erklären, wofür die erste for-Schleife ist und was sie macht? Und funktioniert das so, wie du es jetzt geschrieben hast?

0
VeryBestAnswers  21.01.2020, 19:50
@Thomlol

Ja, das sollte so funktionieren. Probier es halt mal aus!

Bei Bubble Sort werden immer nur benachbarte Elemente vertauscht. Du must einen Bereich mit 10 Elementen sortieren. Im worst case ist das Element, das an den Anfang gehört, ganz am Ende; um es an den Anfang zu bringen, müssen wir die innere Schleife also 9 mal ausführen.

Wenn du Bubble Sort nicht verstanden hast, lies dir bitte den Wikipedia-Artikel durch.

0