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
Keine Kommentare:
Kommentar veröffentlichen