privatestaticvoidsort(Comparable[] a, int lo, int hi){ if (hi <= lo) { return; } int lt = lo; int i = lo + 1; int gt = hi; Comparable v = a[lo]; while (i <= gt) { int cmp = a[i].compareTo(v); if (cmp < 0) { // less exch(a, lt++, i++); } elseif (cmp > 0) { // greater exch(a, i, gt--); } else { // equal i++; } } sort(a, lo, lt - 1); sort(a, gt + 1, hi); }
}
测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/** * 使用 apache RandomUtils 生成测试数据 */ publicstaticvoidmain(String[] args){ Comparable[] random = new Comparable[20]; for (int i = 0; i < 20; i++) { random[i] = RandomUtils.nextInt(1, 10); } sort(random); for (int i = 0; i < 20; i++) { System.out.print(random[i]); if (i != random.length - 1) { System.out.print(" | "); } } isSorted(random); }