快速排序備忘錄

快速排序,相信網上已經有了很多教程,這裏的文章主要是寫給自己的備忘錄。每次選取一個數,作爲參考的數字進行分治、迭代。關鍵在於每次分隔的邊界在於i 的確定。

#include<iostream>
#include<vector>
using namespace std;

int partition(int left,int right,int Array[]){
    int i = left-1;  // i 指的是每一次的左右分隔點
    int choose_one = Array[right];
    for(int p=left;p<right;p++){
        if(Array[p]<choose_one){
            i = i+1;
            int replace = Array[i];
            Array[i] = Array[p];
            Array[p] = replace;
        }
    }
    Array[right] = Array[i+1];
    Array[i+1] = choose_one;
    return i+1;
}

void quickSort(int left,int right,int Array[]){
    int middle;
    if(left<right){
        middle = partition(left,right,Array);  //
        quickSort(left,middle-1,Array);  //迭代、分治
        quickSort(middle+1,right,Array); //迭代、分治
    }
}


int main(){
    //測試用例
    int pre[] = {6,5,3,1,7,10,9};
    quickSort(0,6,pre);
    for(int i = 0;i<7;i++){
        cout<<pre[i]<<endl;
    }
    return 0;
}

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章