这里是使用Hoare方案的快速排序的分区部分,使用第一个元素作为枢轴,最后一个元素作为枢轴:
private static int partitionUseLoAsPivot(int[] arr, int left, int right) {
int pivot = arr[left];
while (left < right) {
while (arr[right] > pivot) {
right--;
}
while (arr[left] < pivot) {
left++;
}
if (left < right) {
swap(arr, left, right);
left++;
right--;
}
}
return right;
}
private static int partitionUseHiAsPivot(int[] arr, int left, int right) {
int pivot = arr[right];
while (left <= right) {
while (arr[left] < pivot) {
left++;
}
while (arr[right] > pivot) {
right--;
}
if (left <= right) {
swap(arr, left, right);
left++;
right--;
}
}
return right;
}
除left < right
和left <= right
条件外,它们几乎完全相同。为什么呢?