public static void quickSort(int[] a, int start, int end) {
if (start >= end)
return;
//以起始索引为分界点
int pivot = a[start];
int i = start + 1;
// int i = start;
int j = end;
while (true) {//可以互换两个while:因为i和j满足i>=end或j>start就可以向前或向后走,最终结果要么ij指向同一个数,要么i指向一个大于pivot的数,j指向一个小于pivot的数,且i在j右边并紧挨着j,综合两种情况j换pivot即可。
while (i <= end && a[i] < pivot) {
i++;
}
while (j > start && a[j] > pivot) {
j--;
}
if (i < j) {
swap(a, i, j);
} else {
break;
}
}
//交换 j和分界点的值
swap(a, start, j);
//递归左子序列
quickSort(a, start, j - 1);
//递归右子序列
quickSort(a, j + 1, end);
}
static void swap(int[]a ,int i,int j){
int t;
t = a[i];
a[i] = a[j];
a[j] = t;
}