左右指針法容易出現(xiàn)問題的地方是一趟快速排序相遇時(shí)的處理方式
如果參考在末尾,要先從左走
如果參考在數(shù)組頭部,要先從右走
參考在數(shù)組頭部,要先從右走
private static int partition(int[] array, int left, int right) {
int key = array[left];
int index = left;
while (left < right) {
while (left < right && array[right] <= key) {
--right;
}
while (left < right && array[left] >= key) {
++left;
}
swap(array, left, right);
}
swap(array, right, index);
return right;
}
private static void swap(int[] cost, int i, int j) {
int temp = cost[i];
cost[i] = cost[j];
cost[j] = temp;
}
參考在末尾,要先從左走
private static int partition2(int[] array, int left, int right) {
int key = array[right];
int index = right;
while (left < right) {
while (left < right && array[left] <= key) {
++left;
}
while (left < right && array[right] >= key) {
--right;
}
swap(array, left, right);
}
swap(array, left, index);
return left;
}