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));
}
}
|