快排 先从后往前找比k小的,再从前往后找比k大的。
如果顺序颠倒就会错误
class Solution {
public int[] sortArray(int[] nums) {
quickSort(nums,0,nums.length-1);
return nums;
}
void quickSort(int[] nums, int low, int high){
if(low >= high)
return;
int i = low;
int j = high;
while(i < j){
while(i < j && nums[j] >= nums[low])//先从后往前找比nums[low]小的
j--;//5 4
while(i < j && nums[i] <= nums[low])//再从前往后找比nums[low]大的
i++;//1 4
//这么写是错的
// while(i < j && nums[i] <= k)//从前往后找比k大的 即无
// i++;
// while(i < j && nums[j] >= k)//从后往前找比k小的 即0
// j--;
if(i < j){
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
int temp = nums[i];
nums[i] = nums[low];
nums[low] = temp;
quickSort(nums,low,i-1);
quickSort(nums,i+1,high);
}
}
【快速排序模板】
最新推荐文章于 2024-02-01 00:16:13 发布