思路一:先交换 i 和 j, i j 相遇后最后再交换 key 和 j 。
public void quickSort(int[] intervals, int i, int j) { //i为数组的第一个
if (i>=j) {
return;
}
int first = i;
i++;
int key = intervals[first];
while(i<j) {
if (intervals[i] <= key) {
i++;
}
if (i<j && intervals[j] >= key) {
j--;
}
if ((intervals[i]>key && intervals[j] <= key) || (intervals[i]>=key
&& intervals[j] < key)) {
int tmp = intervals[i];
intervals[i] = intervals[j];
intervals[j] = tmp;
i++;
j--;
}
}
if (i>=j){
if (intervals[j] < key) {
int tmp = intervals[j];
intervals[j] = intervals[first];
intervals[first] = tmp;
}
}
quickSort(intervals,first,j-1);
quickSort(intervals,j, intervals.length-1);
}
思路二:指针边移动边填坑,最后填充key。
while{
while(){
j--;
}
a[i] = a[j];
while(){
i++;
}
a[j] = a[i];
}
a[i] = key; // i==j