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