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

Informatiker Board » Themengebiete » Praktische Informatik » Algorithmen » QuickSort » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen QuickSort
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
vickal93
Grünschnabel


Dabei seit: 13.05.2015
Beiträge: 7

QuickSort Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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!
29.05.2015 18:46 vickal93 ist offline E-Mail an vickal93 senden Beiträge von vickal93 suchen Nehmen Sie vickal93 in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Das Tauschen muss in die Schleife.

__________________
Syntax Highlighting fürs Board (Link)
29.05.2015 20:10 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
vickal93
Grünschnabel


Dabei seit: 13.05.2015
Beiträge: 7

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Aber da wo es vertauscht wird, ist doch bereits in der if-Schleife und diese wieder in der while?
01.06.2015 19:15 vickal93 ist offline E-Mail an vickal93 senden Beiträge von vickal93 suchen Nehmen Sie vickal93 in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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.

__________________
Syntax Highlighting fürs Board (Link)
01.06.2015 21:47 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Algorithmen » QuickSort