Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Algorithmen » QuickSort » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 4 Beiträge
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.
vickal93

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

Das Tauschen muss in die Schleife.
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!