Quicksort ist ein instabiler Sortieralgorithmus, der mit dem Entwurfsprinzip Divide and Conquer arbeitet.
Idee
- Wähle Pivot-Element (erstes, letztes, median oder zufällig)
- Schiebe kleinere Elemente nach links und größere Elemente nach rechts
- Eine Möglichkeit wäre mit einer
for- Schleife und einem Zähler: - Die
for-Schleife hat zwei Zähler: i, welches einfach durchiteriert undpos- Ist das
i-te Element kleiner als der Pivot, wird es mit dempos-ten Element vertauscht undposwird um 1 erhöht - Am Schluss wird das Pivot-Element mit dem
pos-Element getauscht
- Eine Möglichkeit wäre mit einer
- Wiederhole dies jeweils mit der linken und rechten Teilliste
Implementierung
quickSort(int[] array, int start, int end) {
if (start < end) {
int pos = divide(array, start, end);
quickSort(array, start, pos - 1);
quickSort(array, pos + 1, end);
}
}
int divide(int[] array, int start, int end) {
int pivot = array[start];
int pos = start + 1;
for (int i = start + 1; i <= end; i++) {
if (array[i] <= pivot) {
swap(array, pos, i);
pos++;
}
}
pos--;
swap(array, start, pos);
return pos;
}Laufzeit
Im Best Case und Average Case asymptotisch optimal
Siehe auch