目录
时空复杂度及稳定性对比
快速排序
思路:对于每一次递归,找到哨兵项,将小于该项的放在左边,大于该项的放在右边,详见注释。
void quicksort(vector<int> &nums, int left, int right){
//基线条件
if (nums.size()==0)
return;
if(left>=right)
return;
//随机找到哨兵项,避免每次取头部造成算法退化
srand((unsigned)time(NULL));
int base = (rand() % (right-left+1))+left;
swap(nums[base], nums[left]);
//进行partition
base = nums[left];
int i = left;
int j = right;
while (i < j){
while(i<j && nums[j]>=base)
j--;
swap(nums[j], nums[i