Der Vergleich zu meiner Implementierung von Bobblesort zeigt bei einer Liste von 100000 Einträgen mit 1000 verschiedenen Werten einen beträchlichen Geschwindigkeitsvorsprung:
- Bubblesort ca. 40000 ms.
- Quicksort ca. 120 ms.
Übergibt man jedoch beiden eine schon sortierte Liste derselben Größe kehrt sich das um:
- Bubblesort ca. 12 ms.
- Quicksort ca. 2000 ms.
package at.ande.sorting.quicksort;
import java.util.ArrayList;
import java.util.Stack;
import at.ande.sorting.utils.SortingUtils;
public class QuickSort2 {
ArrayList list;
public ArrayList quickSort2(ArrayList arraylist) {
list = arraylist;
sort(0, arraylist.size() - 1);
return list;
}
public void sort(int left, int right) {
Stack stack = new Stack();
while (true) {
if (left < right) {
int pivot = list.get(SortingUtils.randomOfTwo(left, right));
int i = left - 1;
int j = right + 1;
while (true) {
do {
i = i + 1;
} while (list.get(i) < pivot);
do {
j = j - 1;
} while (list.get(j) > pivot);
if (i >= j) {
break;
}
int temp = list.get(i);
list.set(i, list.get(j));
list.set(j, temp);
}
stack.push(right);
right = left > (i - 1) ? left : (i - 1);
} else {
if (stack.size() == 0) {
break;
}
left = right + 1;
right = stack.pop();
}
}
}
}
Links:
Wikipediaeintrag Quicksort
Ausführliche Seite über Quicksort
No comments:
Post a Comment