void quickSort_(int arr[], int start, int end)
{
if (start < end) {
int s = start, e = end;
int pivot = arr[s];
while (s < e) {
while (s < e && arr[e] >= pivot) e --;
if (s < e) {arr[s] = arr[e];} //对应swap
while (s < e && arr[s] <= pivot) s ++;
if (s < e) {arr[e] = arr[s];} //对应swap
/*
if (s < e) swap(arr[e], arr[s]);
*/
}
// 这里不可以使用swap替代赋值,赋值必须占去pivot的位置,注意下一行的pivot赋值。
arr[e] = pivot;
quickSort_(arr, start, e - 1);
quickSort_(arr, e + 1, end);
}
}
举例:int arr[4] = {1, 4, 3, 2};
如果使用swap,在第二次递归时,会有:1, 4, 3, 4
注意由于必须要有最后一步的pivot赋值,所以之前的赋值里必须要占去前一个pivot的值,所以不能使用swap这里。