BubbleSort Anzahl der Vertauschungen

Soloeco

Aktives Mitglied
Hallo,
ich habe eine kleine Frage zum Thema BubbleSort. Und zwar habe ich ein Array mit 100 zufälligen Zahlen, aus dem Zahlenbereich 1 bus 1000, die ich sortiert ausgeben möchte. Dazu habe ich verschiedene Sortierverfahren bereits geschrieben, die auch soweit funktionieren und auch bubbleSort funktioniert. Doch nun möchte ich mir zusätzlich zu dem sortierten Array die Anzahl der Vertauschungen ausgeben lassen nur irgendwie wird die Variable nicht hochgezählt. Als Ergebnis bekomme ich immer 0 bei der Anzahl der Vertauschungen.

Hier mein Code zum BubbleSort (Nehme auch gerne Verbesserungsvorschläge generell zum Code):

Java:
public void bubbleSort(int[] array) {
        bubbleArray = array;
        int vertauschungen = 0;
        int n = bubbleArray.length;
        do {
            int m = 1;
            for(int i = 0; i < n - 1; i++) {
                if(bubbleArray[i] > bubbleArray[i + 1]) {
                    int temp = bubbleArray[i];
                    bubbleArray[i] = bubbleArray[n];
                    bubbleArray[n] = temp;
                    vertauschungen++;
                    m = i + 1;                 
                }
            }
            n = m;
        } while (n > 1);
       
        for(int x = 0; x < bubbleArray.length; x++) {
            System.out.print(bubbleArray[x] + " | ");
        }
        System.out.println("Anzahl der Vertauschungen: " + vertauschungen);
    }

Würde mich freuen wenn mich jemand aufklären kann woran das liegt. Sitze da bereits einige Zeit dran.
Freundlich Grüße
 

Kababär

Top Contributor
Dein Code scheint nicht ganz zu funktionieren.
Probiere es mal mit folgenden Daten:
Code:
int[] arr = new int[]
        { 3, 4, 1, 2, 6, 11, 20, 12 };

Ich für meinen Teil bekomme dann:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8
at sotz.BubbleSort.bubbleSort(BubbleSort.java:28)
at sotz.BubbleSort.main(BubbleSort.java:12)

Denn
int n = bubbleArray.length;
müsste
int n = bubbleArray.length - 1;
heißen.
Dennoch ist mein Feld unsortiert:
3 | 12 | 1 | 2 | 6 | 11 | 20 | 4 | Anzahl der Vertauschungen: 1

Edit: Der Fehler lag daran, dass du die falschen Bedingungen geprüft hast.
So sollte es funktionieren:
Code:
if (bubbleArray[i] > bubbleArray[i + 1])
                {
                    int temp = bubbleArray[i];
                    bubbleArray[i] = bubbleArray[i + 1];
                    bubbleArray[i + 1] = temp;
                    vertauschungen++;
                    m = i + 1;
                }

Dein n ist zu groß. Es ist ja die Länge deines Arrays -1, also das letzte Element, was du immer tauschen willst. Aber du willst ja nur das nächste Element mit dem jetzigen tauschen.
 

Soloeco

Aktives Mitglied
Also ich habe jetzt ausprobiert mit der Länge, also das hier:
int n = bubbleArray.length;
müsste
int n = bubbleArray.length - 1;
und ich habe das aus deinem Edit auch probiert und auch beides in Kombination. Ich bekomme nie eine Fehlermeldung, mein Array ist sortiert so wie es soll nur immer noch nicht werden die Vertauschungen ausgegeben. Die Variable vertauschungen bleibt 0.

Das hier habe ich jetzt:

Java:
public void bubbleSort(int[] array) {
        bubbleArray = array;
        int vertauschungen = 0;
        int n = bubbleArray.length - 1;
        do {
            int m = 1;
            for(int i = 0; i < n - 1; i++) {
                if(bubbleArray[i] > bubbleArray[i + 1]) {
                    int temp = bubbleArray[i];
                    bubbleArray[i] = bubbleArray[i + 1];
                    bubbleArray[i + 1] = temp;
                    vertauschungen++;
                    m = i + 1;                 
                }
            }
            n = m;
        } while (n > 1);
       
        for(int x = 0; x < bubbleArray.length; x++) {
            System.out.print(bubbleArray[x] + " | ");
        }
        System.out.println("Anzahl der Vertauschungen: " + vertauschungen);
    }
 

DrZoidberg

Top Contributor
Wahrscheinlich rufst du die Methode nie auf. Du verwendest stattdessen eine andere. Hast du vielleicht zwei "bubbleSort" Methoden?
Übrigens war "int n = bubbleArray.length;" schon korrekt. n ist die Anzahl der Zahlen in deinem Array, die noch nicht sortiert sind, und nicht der Index der letzten Zahl.
 

Soloeco

Aktives Mitglied
Die Methode rufe ich schon auf, in einer zweiten Klasse die ich zum Ausgeben des Arrays habe. Da kommt auch der sortierte Array bei heraus. Das einzige Problem dass ich nun habe ist, dass aus welchem Grund auch immer die Variable vertauschungen nicht hochgezählt wird, die bleibt immer 0.
 

Soloeco

Aktives Mitglied
Aber das Array wird ja sortiert ausgegeben. Wie ich in meinem ersten Post geschrieben habe, habe ich auch noch zwei andere sortier verfahren, die bereits funktionieren. Dort habe ich den gleichen Array sortieren lassen und dabei werden Vertauschungen benötigt. Fazit: Ein Array, bei zwei Variaten werden vertauschungen benötigt, heißt also bei der dritten müsste dies auch der Fall sein
 

Soloeco

Aktives Mitglied
Danke, habe endlich die Lösung! @JStein52 du hast Recht. Ich hatte dummerweise einen Array den ich dann sortiert habe und dann mit den anderen beiden Sortierverfahren nocheinmal sortieren wollte. Habe jetzt den Ausgangsarray in drei einzelne temporäre arrays gepackt die ich dann jeweils mit den verschiedenen Verfahren sortiere. Dein Hinweis mit dem println im Vertauschungszweig hat mich letztendlich auf die Lösung gebracht. Danke nocheinmal :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Bubblesort Allgemeine Java-Themen 20
B 2 Dimensionaler Bubblesort Allgemeine Java-Themen 2
R Bubblesort Allgemeine Java-Themen 27
K Bubblesort Programmierung, finde Fehler nicht . Allgemeine Java-Themen 25
BeginnerJava Anzahl der 5 % - Zuwächse ausgeben Allgemeine Java-Themen 6
M Wie übergebe ich den Zähler für die Anzahl Rekursionsschritte korrekt? Allgemeine Java-Themen 2
S BlockingQueue mit dynamischer Anpassung der Anzahl von Producer und Consumer Threads Allgemeine Java-Themen 1
S Iterable<?> anzahl der Element Allgemeine Java-Themen 14
M Java- Bild gewissen Anzahl von Sekunden anzeigen?! Allgemeine Java-Themen 4
F Best Practice Große Anzahl an Objekten speichern und lesen Allgemeine Java-Themen 19
M Relative Anzahl an verschachtelten Forschleifen Allgemeine Java-Themen 8
The Pi Anzahl der Gewichtscheiben berechnen Allgemeine Java-Themen 11
P Threads Parallelisierte DB-Abfragen mit variabler Anzahl an Threads Allgemeine Java-Themen 4
J Anzahl geöffneter Plugins Allgemeine Java-Themen 3
A Anzahl an Threads Systemweit Allgemeine Java-Themen 2
J Anzahl von Möglichkeiten zur Verteilung von Kugeln in Behälter Allgemeine Java-Themen 3
P Erste Schritte Dynamische Anzahl von verschachtelten Schleifen Allgemeine Java-Themen 5
E ArrayList Anzahl der gleichen Elemente Allgemeine Java-Themen 4
R Int werte vergleichen und Anzahl Paare ausgeben Allgemeine Java-Themen 4
L Ermitteln der Anzahl an Lösungen von quatratischen Gleichungen (Sieb von Atkin) Allgemeine Java-Themen 1
L Anzahl der Tage eines Monats Allgemeine Java-Themen 3
P Auf die Anzahl der Joins achten beim WS design Allgemeine Java-Themen 1
J Anzahl der Zeichen bei Eingabe begrenzen Allgemeine Java-Themen 5
S Zur Laufzeit Klasse mit einer anzahl von X Objekten erstellen Allgemeine Java-Themen 5
M Eingabe von Arrays geht über gewünschte Anzahl hinaus Allgemeine Java-Themen 2
G Liste anzahl der gleichen Objekte Allgemeine Java-Themen 6
P Anzahl vo Einträgen in verschiedenen Sets Allgemeine Java-Themen 3
R Anzahl der gerade gedrückten Tasten Allgemeine Java-Themen 6
J ermitteln der Anzahl der Monate Allgemeine Java-Themen 7
M Anzahl der Durchläufe einer Funktion errechnen Allgemeine Java-Themen 6
G Anzahl Primzahlen im Intervall Allgemeine Java-Themen 3
X Textdatei auf gewünschte Anzahl der Zeilen kürzen Allgemeine Java-Themen 2
M Anzahl Farbwerte (RGB) im Array speichern - Problem Allgemeine Java-Themen 13
N variable Anzahl von Objektinstanzen zur Laufzeit erstellen Allgemeine Java-Themen 4
D unbekannte Anzahl checkboxes Allgemeine Java-Themen 2
TiME-SPLiNTER Unbekannte Anzahl serialisierter Objekte lesen Allgemeine Java-Themen 2
Iron Monkey Anzahl der Monate ermitteln Allgemeine Java-Themen 17
neonfly Anzahl Zeichen pro Zeile auf der Konsole Allgemeine Java-Themen 8
R ArrayList -- Maximale Anzahl an Elementen Allgemeine Java-Themen 2
O Große Anzahl Bilder laden Allgemeine Java-Themen 7
S Array: Anzahl Elemente mit best. Wert zählen Allgemeine Java-Themen 4
V Java-Objekt. wie groß maximal ? anzahl der einträge Allgemeine Java-Themen 4
M Aus Anzahl Tagen Datum ermitteln Allgemeine Java-Themen 8
M JTable: Anzahl Zeichen bei Eingabe Allgemeine Java-Themen 2
T Anzahl Tage zwischen zwei Daten - Stunde fehlt? Allgemeine Java-Themen 2
S Anzahl der Stunden in Excel Datei schreiben Allgemeine Java-Themen 2
G Anzahl an Tagen auf Datum addieren Allgemeine Java-Themen 4
MQue Anzahl der Ziffern Allgemeine Java-Themen 13
G Anzahl Tage in Datum umwandeln Allgemeine Java-Themen 13
MQue Anzahl der Kommastellen Allgemeine Java-Themen 6
L Anzahl Tage zwischen zwei Kalenderdaten Allgemeine Java-Themen 5
F Anzahl der nachkommastellen bestimmen nur wie? Allgemeine Java-Themen 10
M Aktualisieren eines Chatprofils (Anzahl Minuten) Allgemeine Java-Themen 4
G Variable Anzahl JTextfleder Allgemeine Java-Themen 3
S Bandbreite/Anzahl Pakete messen Allgemeine Java-Themen 3
V String formatiert ausgeben ( gleiche Anzahl von Ziffern ) Allgemeine Java-Themen 5
padde479 Anzahl Methodenaufrufe Allgemeine Java-Themen 7
J Matrix mit unterschiedlicher Anzahl von Spalten pro Zeile? Allgemeine Java-Themen 4
F Datum mit anzahl tagen berechnen Allgemeine Java-Themen 3
W PrepareStatement und Anzahl der Datensätze Allgemeine Java-Themen 2
rambozola anzahl zeichen in konsole eclipse begrenzt? Allgemeine Java-Themen 5
G anzahl "verwendeter" elemente eines arrays ermitte Allgemeine Java-Themen 2
M Anzahl der Threads pro Programm? Allgemeine Java-Themen 3
R java.lang.String maximale Anzahl der Zeichen Allgemeine Java-Themen 7
V Anzahl der Zeilen in einem File Allgemeine Java-Themen 3
K anzahl laufender Threads Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben