QuickSort

Neue Frage »

Auf diesen Beitrag antworten »
vickal93 QuickSort

Meine Frage:
Hallo,

Ich hänge nun seit gewisser Zeit an meinem Algorithmus für den QuickSort und finde einfach meinen Fehler nicht, denn schlussendlich mag er mir meine Liste nicht sortieren. An sich sollte ja doch mein Algorithmus stimmen, oder etwa nicht?

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
public class QuickSort {
	/** Array of int sortieren mittels QuickSort */
	public static void sort(int[] daten) {
		quicksort(daten, 0, daten.length - 1);
	}

	/** Teilarray of int sortieren mittels QuickSort */
	public static void quicksort(int[] daten, int start, int ende) {
		if (start >= ende) {
			return;
		} // Max 1 Element: fertig!
			// Divide at Pivot:
		final int pivot = daten[start]; // Pivot
		int links = start + 1;
		int rechts = ende;

		while (true) {	
			while (daten[links] < pivot) {
				links++;
				if (links == rechts) {
					break;
				}
			}
			while (daten[rechts] > pivot) {
				rechts--;
				if (rechts == links) {
					break;
				}
			}

			if (links < rechts) {
				int temp = daten[links];
				daten[links] = daten[rechts];
				daten[rechts] = temp;
				links++;
				rechts--;
			} else {
				break;
			}
		}
		// Pivot an der RICHTIGEN Position einsetzen:
		SortUtil.vertausche(daten, links, rechts);
		// Conquer (kein Merge notwendig, wenn Pivot korrekt):
		quicksort(daten, start, rechts - 1);
		quicksort(daten, rechts + 1, ende);
	}
	
	// zum Testen
	public static void main(String[] args) {
		int[] test = new int[] { 23, 12, 45, 31, 51, 71, 07 };
		sort(test);
		System.out.print("Ergebnis:");
		for (int val : test) {
			System.out.print(" " + val);
		}
		System.out.println();
		System.out.println("Sortiert? " + SortUtil.isSorted(test));
	}
}


sowie die SortUtil Klasse:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
public class SortUtil {
	/** Testet, ob Daten sortiert sind. */
	public static boolean isSorted(int[] daten) {
		int prev = daten[0];
		for (int i = 1; i < daten.length; i++) {
			if (daten[i] < prev) {
				return false;
			}
			prev = daten[i];
		}
		return true;
	}

	/** Vertauscht zwei Elemente */
	public static void vertausche(int[] daten, int x, int y) {
		final int tmp = daten[x];
		daten[x] = daten[y];
		daten[y] = tmp;
	}

}


Meine Ideen:
Wäre Euch für jeden Hilfe sehr dankbar!
 
Auf diesen Beitrag antworten »
eulerscheZahl

Das Tauschen muss in die Schleife.
Auf diesen Beitrag antworten »
vickal93

Aber da wo es vertauscht wird, ist doch bereits in der if-Schleife und diese wieder in der while?
Auf diesen Beitrag antworten »
eulerscheZahl

So etwas, wie eine if-Schleife gibt es nicht. Eine Schleife wird mehrfach durchlaufen, der Code in einer if Anweisung 0 oder 1 mal.

Es muss ins while.
 
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »