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