C++实现快速排序(最简洁)


template<typename T>
void kpx(vector<T>& a, int left, int right) {
    if(left>=right) return;
    swap(a[left], a[rand()%(right-left+1)+left]);
    int i=left-1;
    for(int j=left; j<right; ++j){
        if(a[j]<=a[right]){
            ++i;
            swap(a[i], a[j]);
        }
    }
    swap(a[i+1], a[right]);
    kpx(a, left, i);
    kpx(a, i+2, right);
}

分--将问题分解为规模更小的子问题

治--将这些规模更小的子问题逐个击破

相对于归并,不需要外存来合并(得出“母”问题的解)

对于特殊情况本来就有序的,就会退化为冒泡排序


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM