// IE Test: javac QuickSortM3.java; appletviewer QuickSortM3.html import java.awt.*; public class QuickSort3way extends Animate { boolean equal(double a[], int i, int j) { return !less(a, i, j) && !less(a, j, i); } void sort(double[] a, int l, int r) { quicksort(a, l, r); } void quicksort(double a[], int l, int r) { if (r <= l) return; int i = l-1, j = r, p = l-1, q = r, k; for (;;) { while (less(a, ++i, r)) ; while (less(a, r, --j)) if (j == l) break; if (i >= j) break; exch(a, i, j); if (equal(a, i, r)) { p++; exch(a, p, i); } if (equal(a, r, j)) { q--; exch(a, q, j); } } exch(a, i, r); j = i-1; i = i+1; for (k = l ; k <= p; k++,j--) exch(a, k, j); for (k = r-1; k >= q; k--,i++) exch(a, k, i); quicksort(a, l, j); quicksort(a, i, r); } }