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);
}

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

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

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

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

posted @ 2021-03-12 23:10  赫拉克利特  阅读(619)  评论(0编辑  收藏  举报