快速排序 简洁实现

快排 c++简洁实现

  • 代码
    void qsort(vector<int>& n,int left,int right){
        if(left>=right) return;
        int l=left-1,r=right+1,base=n[left+(right-left)/2];
        while(l<r){
            do l++;while(n[l]<base);
            do r--;while(n[r]>=base);
            if(l<r) swap(n[l],n[r]);
            else qsort(n,left,r),qsort(n,r+1,right);
        }
    }
    
  • 原理
    • 参考博文
    • 一些补充:
      • 为什么要先l,r加减1,再do while而不是直接while,当l,r同时等于base直接while会死循环,所以保证每轮lr推进了来避免
      • 可以改成直接while的吗?(待补充)
posted @ 2021-05-13 15:49  尾巴一米八  阅读(69)  评论(0)    收藏  举报