// IE Test: javac QuickSortM3.java; appletviewer QuickSortM3.html import java.awt.*; public class QuickSortM3 extends Animate { void insertion(double[] a, int l, int r) { int i; for (i = r; i > l; i--) if (less(a, i, i-1)) exch(a, i, i-1); for (i = l+2; i <= r; i++) { int j = i; while (less(a, j, j-1)) { exch(a, j, j-1); j--; } } } int partition(double a[], int l, int r) { int i = l-1, j = r; for (;;) { while (less(a, ++i, r)) ; while (less(a, r, --j)) if (j == l) break; if (i >= j) break; exch(a, i, j); } exch(a, i, r); return i; } private final static int M = 30; void quicksort(double[] a, int l, int r) { if (r-l <= M) return; exch(a, (l+r)/2, r-1); if (less(a, r-1, l)) exch(a, l, r-1); if (less(a, r, l)) exch(a, l, r); if (less(a, r, r-1)) exch(a, r-1, r); int i = partition(a, l+1, r-1); quicksort(a, l, i-1); quicksort(a, i+1, r); } void sort(double a[], int l, int r) { quicksort(a, l, r); insertion(a, l, r); } }