文章目录
快排
void quick(vector<int>& nums, int l, int r) {
if (l >= r) return ;
int i = l, j = r;
int temp = nums[l];
// 如果不取=, 当碰到相同大小的数时, i,j都不会变, 无限循环
// 解决办法: 1. 使用>= <= 2. 使用>, <, 但是每次赋值后人为i++, j--
// 214472596 i j 都为4, temp为3, 如果没有时刻判断j>i有bug, 因此需要时刻判断j和i的关系, 并不只是最外层总体判断一次
while(j > i) {
while(j > i && nums[j] > temp) j--;
if (j > i) {
nums[i] = nums[j];
i++;
}
while(j > i && nums[j] > temp) i++;
if (j > i) {
nums[j] = nums[i];
j++;
}
}
/*
while(j > i) {
while(j > i && nums[j] >= temp) j--;
nums[i] = nums[j];
while(j > i && nums[i] <= temp) i++;
nums[j] = num[i];
}
*/
nums[i] = tmep;
quick(nums. l, i-1);
quick(nums. i+1, r);
}