快速排序不检查边界条件,如图所示,在while循环退出时,程序代码直接进行赋值,没有检查边界条件,正确代码如下:
int partition(int *array, int low, int high) {
int pivot = array[low];
int i = low, j = high;
while (i < j) {
while (i < j && (array[j] > pivot)) {
j--;
}
if (i < j) { // easy to lack
array[i++] = array[j];
}
while (i < j && array[i] < pivot) {
i++;
}
if (i < j) { // easy to lack
array[j--] = array[i];
}
}
array[i] = pivot;
return i;
}