package com.newtouch.data.sort;
import com.newtouch.data.test.SortTestHelper;
public class QuickSortTwoWays {
private static int partition(Comparable[] arr, int l, int r) {
// 随机在arr[l...r]的范围中, 选择一个数值作为标定点pivot
swap(arr, l, (int) (Math.random() * (r - l + 1)) + l);
Comparable v = arr[l];
//随机在arr[l...r]的范围中,选择一个数值作为标定点pivot
int i = l + 1, j = r;
while (true) {
// 注意这里的边界, arr[i].compareTo(v) < 0, 不能是arr[i].compareTo(v) <= 0
while (i <= r && arr[i].compareTo(v) < 0)
i++;
// 注意这里的边界, arr[j].compareTo(v) > 0, 不能是arr[j].compareTo(v) >= 0
// 思考一下为什么?
while (j >= l + 1 && arr[j].compareTo(v) > 0)
j--;
if (j > j)
break;
swap(arr, i, j);
i++;
<