void quickSort(vector<int>& nums, int begin, int end) {
if (begin >= end) return ;
int x = rand() % (end - begin + 1) + begin;
swap(nums[begin], nums[x]);
int key = nums[begin];
int l=begin, r=end;
while(l<r) {
while(l<r && nums[r]>=key) --r; // 为什么这里用>=?,因为这里如果使用大于,那么当有重复数据的时候有可能永远跳不出这个while(l<r)循环,因为有可能两个相邻的数值是一样的
if (l<r) nums[l] = nums[r];
while(l<r && key>=nums[l]) ++l;
if (l<r) nums[r] = nums[l];
}
nums[l] = key;
quickSort(nums, begin, l-1);
quickSort(nums, l+1, end);
}
C++快排
最新推荐文章于 2024-04-27 15:25:53 发布