力扣215:数组中的第K个最大元素
public int partition(int[] nums, int low, int high) {
int pivot = nums[low];
while (low < high) {
while (pivot <= nums[high] && low < high) high--;
nums[low] = nums[high];
while (pivot >= nums[low] && low < high) low++;
nums[high] = nums[low];
}
nums[low] = pivot;
return low;
}
public void quicksort(int[] nums, int low, int high) {
int pivot;
if (low < high) {
pivot = partition(nums, low, high);
quicksort(nums, low, pivot - 1);
quicksort(nums, pivot + 1, high);
}
}
一般我们写快排的时候都是如下写的:
while (pivot < nums[high] && low < high)
while (pivot > nums[low] && low < high)
也就是说不带“=”,这时的快速排序就会有重复元素覆盖掉未重复元素,从而导致错误。
而如果加入“=”,程序在运行这一行代码时,就会跳过重复元素,而不会中断while循环交换元素,自然不会出现错误。
具体证明可以:找一个含重复元素的数组在草稿纸上验证。