Quicksort Problem

Status
Nicht offen für weitere Antworten.

wolfheart

Mitglied
Hallo, ich habe hier einen Quicksortcode der fast funktioniert, aber nur fast... Aus irgendeinem Grund werden nicht alle Zahlen sortiert, was ist hier falsch:

Java:
public class AufgabeQuicksort {

	public static void main(String[] args) {
		 int[] array = {1, 3, 7, 2, 4, 8, 9, 6, 5};
		// int[] array = {3, 2};
		// int[] array = {2, 0, 2, 0, 5, 4};
		// int[] array = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 2};
		// int[] array = {44, 6, 55, 30, 94, 18};

		int u = 0; // lowest array-element
		int o = array.length - 1; // highest array-element

		println("Unsorted Array: ");
		for (int l = 0; l < array.length; l++) {
			if (l < array.length - 1)
				System.out.print(array[l] + ",");
			else
				System.out.println(array[l]);
		}

		quicksortAlg(array, u, o);

		System.out.println("Finished: ");
		for (int l = 0; l < array.length; l++) {
			if (l < array.length - 1)
				System.out.print(array[l] + ",");
			else
				System.out.println(array[l]);
		}
	}

	// ============== Quicksort algorithm ================
	public static void quicksortAlg(int[] sortArray, int u, int o) {
		int index;
		System.out.println("o: " + o);
		if (o > u + 1) {
			index = partition(sortArray, u, o);
			u = index;
			quicksortAlg(sortArray, index++, o);
			quicksortAlg(sortArray, u, index--);
		}
	}

	// ==================== Function partition ====================
	public static int partition(int[] arrayDivide, int u, int o) {
		int index = u;
		int p = o; // Index from pivot-element

		System.out.print("Pivot-element: " + arrayDivide[p] + " |");

		for (int pointer = u; pointer < o; pointer++) {
			if (arrayDivide[pointer] <= arrayDivide[p]) {
				swap(arrayDivide, index, pointer);
				index++;
			}
		}
		swap(arrayDivide, index, p);

		// print arrayDivide on the console
		for (int l = 0; l < arrayDivide.length; l++) {
			if (l < arrayDivide.length - 1)
				System.out.print(arrayDivide[l] + ",");
			else
				System.out.println(arrayDivide[l]);
		}
		return index;
	}

	// ======== Function to switch array-elements ==============
	public static void swap(int[] arraySwap, int idx1, int idx2) {
		int tmp = arraySwap[idx1];
		arraySwap[idx1] = arraySwap[idx2];
		arraySwap[idx2] = tmp;
	}
}

Beispiel: 3 und 2 werden nicht vertauscht

Java:
Unsorted Array: 
1,3,7,2,4,8,9,6,5
o: 8
Pivot-element: 5 |1,3,2,4,5,8,9,6,7
o: 8
Pivot-element: 7 |1,3,2,4,5,6,7,8,9
o: 8
Pivot-element: 9 |1,3,2,4,5,6,7,8,9
o: 8
o: 9
o: 7
o: 5
Finished: 
1,3,2,4,5,6,7,8,9

Beispiel: hier wird nur die 4 mit der 5 vertauscht

Java:
Unsorted Array: 
2,0,2,0,5,4
o: 5
Pivot-element: 4 |2,0,2,0,4,5
o: 5
o: 5
Finished: 
2,0,2,0,4,5
 
S

SlaterB

Gast
und du kannst am Code rein gar nix erkennen, weiter debuggen?

Java:
public static void quicksortAlg(int[] sortArray, int u, int o) {
        int index;
        System.out.println("o: " + o);
        if (o > u + 1) {
            index = partition(sortArray, u, o);
            u = index;
            quicksortAlg(sortArray, index++, o);
            quicksortAlg(sortArray, u, index--);
        }
    }
die Methode beginnt im ersten Schritt noch ganz nett mit u=0, o = max
dann kommt irgendein index aus, ganz egal welcher irgendwas mittleres,
durch u = index; sind u und index offensichtlich ziemlich das gleiche, wozu das?!

und was steht noch dahinter?
> quicksortAlg(sortArray, index++, o);
na gut, kann man ungefähr als 'sortiere den oberen Teil verstehen'
aber dann
> quicksortAlg(sortArray, u, index--);
u ist doch sowieso ungefähr gleich index, was soll dieser Befehl machen? zumal u und index alle potentiell mittlere bis hohe Zahlen sind,
der Bereich von 0 an (vom alten u an) wird gänzlich ignoriert

die Zeile
> u = index;
scheint ohne jeden Sinn zu sein, die kann man komplett streichen, das alte u muss gemerkt werden,
dann noch die nächsten beiden Zeilen in
quicksortAlg(sortArray, index + 1, o);
quicksortAlg(sortArray, u, index - 1);
umwandeln, schon scheint es zu laufen, index++ usw. ist sehr gefährlich, damit wird die index-Variable geändert


edit: {3,2} wird noch nicht sortiert, auch wenn ein Teilbereich nur zwei Zahlen hat, könnte der durch die Bedingung if (o > u + 1) übersprungen werden
 
Zuletzt bearbeitet von einem Moderator:

wolfheart

Mitglied
Vielen Dank!

Hab das mit index geändert und jetzt sortiert er weiter, aber leider immer noch nicht ganz bis zum schluss :( ich dreh noch durch

Beispiel:
Java:
Unsorted Array: 
10,4,33,44,17,20,3,2,9,82,38,67,55,11,32,23,19,7,6,14,29
o: 20
Pivot-element: 29 |10,4,17,20,3,2,9,11,23,19,7,6,14,29,32,33,82,38,67,55,44
o: 20
Pivot-element: 44 |10,4,17,20,3,2,9,11,23,19,7,6,14,29,32,33,38,44,67,55,82
o: 20
Pivot-element: 82 |10,4,17,20,3,2,9,11,23,19,7,6,14,29,32,33,38,44,67,55,82
o: 20
o: 19
o: 16
Pivot-element: 38 |10,4,17,20,3,2,9,11,23,19,7,6,14,29,32,33,38,44,67,55,82
o: 16
o: 15
o: 12
Pivot-element: 14 |10,4,3,2,9,11,7,6,14,19,17,20,23,29,32,33,38,44,67,55,82
o: 12
Pivot-element: 23 |10,4,3,2,9,11,7,6,14,19,17,20,23,29,32,33,38,44,67,55,82
o: 12
o: 11
Pivot-element: 20 |10,4,3,2,9,11,7,6,14,19,17,20,23,29,32,33,38,44,67,55,82
o: 11
o: 10
o: 7
Pivot-element: 6 |4,3,2,6,9,11,7,10,14,19,17,20,23,29,32,33,38,44,67,55,82
o: 7
Pivot-element: 10 |4,3,2,6,9,7,10,11,14,19,17,20,23,29,32,33,38,44,67,55,82
o: 7
o: 5
o: 2
Pivot-element: 2 |2,3,4,6,9,7,10,11,14,19,17,20,23,29,32,33,38,44,67,55,82
o: 2
o: -1
Finished: 
2,3,4,6,9,7,10,11,14,19,17,20,23,29,32,33,38,44,67,55,82
 
S

SlaterB

Gast
edit: {3,2} wird noch nicht sortiert, auch wenn ein Teilbereich nur zwei Zahlen hat, könnte der durch die Bedingung if (o > u + 1) übersprungen werden
?
bisschen arbeiten darfst du auch noch, z.B. die Bedingung modifizieren

falls du das schon gemacht hast und 3,2 funktioniert, dann bitte darauf hinweisen + neuen Code, dann kann ich nochmal nachschauen
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R QuickSort Verständis Problem (?) Java Basics - Anfänger-Themen 2
B Quicksort Problem Java Basics - Anfänger-Themen 6
S Mein Quicksort Problem: he method quickSort(int[], int, int) Java Basics - Anfänger-Themen 2
I Java Quicksort PAP Java Basics - Anfänger-Themen 2
B Quicksort in Verbindung mit einem Projekt Java Basics - Anfänger-Themen 1
M QuickSort und Liste Java Basics - Anfänger-Themen 6
S Laufzeit Quicksort wenn alle Elemente gleich sind Java Basics - Anfänger-Themen 4
G Quicksort Algorithmus Java Basics - Anfänger-Themen 12
Hanschyo Quicksort sortiert von groß nach klein Java Basics - Anfänger-Themen 3
R Quicksort mit Interface Comparable Java Basics - Anfänger-Themen 6
L Quicksort verstehen Java Basics - Anfänger-Themen 3
M Quicksort Laufzeit langsam Java Basics - Anfänger-Themen 5
M Quicksort Laufzeit langsam Java Basics - Anfänger-Themen 0
J Quicksort mit Stack Java Basics - Anfänger-Themen 4
Liondary Quicksort Java Basics - Anfänger-Themen 20
K Quicksort Fehler in der Implementierung Java Basics - Anfänger-Themen 2
S Quicksort Algorithmus Java Basics - Anfänger-Themen 2
D Java Quicksort Java Basics - Anfänger-Themen 5
A Frage zu QuickSort Java Basics - Anfänger-Themen 9
B Quicksort mit Durchschnitt als Pivot Java Basics - Anfänger-Themen 1
K Quicksort Java Basics - Anfänger-Themen 3
M Quicksort - Probleme Java Basics - Anfänger-Themen 5
T QuickSort implementieren Java Basics - Anfänger-Themen 5
M Quicksort implementierung Java Basics - Anfänger-Themen 23
E Quicksort Java Basics - Anfänger-Themen 8
Xendarii Quicksort gibt kein Ergebnis aus Java Basics - Anfänger-Themen 13
E QuickSort: Ergebniss speichern Java Basics - Anfänger-Themen 2
P quickSort eines Objekt-Arrays geht nicht! Java Basics - Anfänger-Themen 11
F Stackoverflow bei Quicksort Java Basics - Anfänger-Themen 2
F Quicksort Java Basics - Anfänger-Themen 22
C Quicksort Invariante Java Basics - Anfänger-Themen 2
C QuickSort - Pivot in der Mitte Java Basics - Anfänger-Themen 5
P QuickSort iterativ Java Basics - Anfänger-Themen 5
K Eine Frage zum Quicksort Java Basics - Anfänger-Themen 11
B Quicksort --> Methodenaufruf Java Basics - Anfänger-Themen 10
B QuickSort - Fehler nicht zu finden Java Basics - Anfänger-Themen 2
A Quicksort, #Vergleiche zählen klappt nicht Java Basics - Anfänger-Themen 3
J Quicksort Implementierung-- Exception ArrayOutOfBounds Java Basics - Anfänger-Themen 6
M Fehler in meinem Quicksort! Java Basics - Anfänger-Themen 21
B Quicksort Struktogramm Java Basics - Anfänger-Themen 9
G Frage zu Quicksort Java Basics - Anfänger-Themen 18
0 Quicksort bsp Java Basics - Anfänger-Themen 5
M Quicksort Java Basics - Anfänger-Themen 2
C Quicksort raten Java Basics - Anfänger-Themen 2
K ArrayList sortieren mit Quicksort Java Basics - Anfänger-Themen 3
M Quicksort Java Basics - Anfänger-Themen 4
J Quicksort programmieren Probleme Java Basics - Anfänger-Themen 9
S Quicksort Programm Java Basics - Anfänger-Themen 7
D Quicksort Java Basics - Anfänger-Themen 3
K Parameterübergabe bei quickSort Java Basics - Anfänger-Themen 6
S QuickSort will mir nicht in den Kopf (an einer Stelle) Java Basics - Anfänger-Themen 14
0 Quicksort Java Basics - Anfänger-Themen 2
M QuickSort Java Basics - Anfänger-Themen 4
J QuickSort - kurze Frage Java Basics - Anfänger-Themen 9
H Quicksort und Rekursiv: Türme von Hanoi Java Basics - Anfänger-Themen 9
K Verständnis Problem bei Server/Client Java Basics - Anfänger-Themen 2
I WildFily - unterschiedliche Libs im Projekt verursachen Problem Java Basics - Anfänger-Themen 11
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
L Taschenrechner Problem Java Basics - Anfänger-Themen 4
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
A ScheduledExecutorService problem Java Basics - Anfänger-Themen 7
marcelnedza Problem mit Weltzuweisung, JavaKarol Java Basics - Anfänger-Themen 13
XWing Methoden rückgabe Problem? Java Basics - Anfänger-Themen 6
M Erste Schritte Collatz Problem max int Java Basics - Anfänger-Themen 3
M Problem bei verschachtelter for-Schleife bei zweidimensionalen Arrays Java Basics - Anfänger-Themen 3
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
frager2345 Problem mit Methode Java Basics - Anfänger-Themen 4
L Problem bei Rechnung mit Math.pow Java Basics - Anfänger-Themen 13
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
SUPERTJB return Problem Java Basics - Anfänger-Themen 3
sserio BigInteger Problem Java Basics - Anfänger-Themen 4
JordenJost Taschenrechner problem Java Basics - Anfänger-Themen 5
K Problem mit "Random" Java Basics - Anfänger-Themen 5
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
xanxk Problem For-Schleife mit Charakter Java Basics - Anfänger-Themen 2
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
J Schleife Problem Java Basics - Anfänger-Themen 2
D Problem mit der Erkennung von \n Java Basics - Anfänger-Themen 2
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
M Verständins Problem bei Aufgabe Java Basics - Anfänger-Themen 4
HeiTim Problem mit der Kommasetzung an der richtigen stelle Java Basics - Anfänger-Themen 59
Temsky34 Problem mit dem Code Java Basics - Anfänger-Themen 17
P Problem mit Calendar.getDisplayName() Java Basics - Anfänger-Themen 8
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
M Problem mit Klassenverständnis und Button Java Basics - Anfänger-Themen 8
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
H Problem mit Verzweigungen Java Basics - Anfänger-Themen 6
H Problem mit Rückgabewert Java Basics - Anfänger-Themen 7
josfe1234 JAVA FX problem Java Basics - Anfänger-Themen 3
A Code Problem Java Basics - Anfänger-Themen 6
Henri Problem von Typen Java Basics - Anfänger-Themen 7
J Problem mit "ArrayIndexOutOfBoundsException" Java Basics - Anfänger-Themen 11
K jackson Mapping - Problem mit Zeitzonen Java Basics - Anfänger-Themen 10
B Threads Problem mit mehreren Threads Java Basics - Anfänger-Themen 38
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16

Ähnliche Java Themen

Neue Themen


Oben