快速排序
基本思想:
1. 先取出一個數作爲基準數。
2. 分區過程,將比這個數大的全放到它的右邊,小於或等於它的全放左邊。
3. 再對左右重複第二步,直到到各個區間只有一個數。
#include<iostream>
using namespace std;
template<class T>
void quick_sort(T s[],int start, int end){
int oldStart = start, oldEnd = end;
int temp = start;
T mid = s[start++];
while(start<=end){
if(temp < start){
if(s[end] > mid){
end --;
continue;
}
s[temp] = s[end];
temp = end--;
}else{
if(s[start] <= mid){
start++;
continue;
}
s[temp] = s[start];
temp = start++;
}
s[temp] = mid;
// 如果沒有調整,說明已經有序,不用再分了
if(temp == oldStart){
return;
}
quick_sort(s, oldStart, temp-1);
quick_sort(s, temp+1, oldEnd);
}
}
void printArr(int a[],int size){
for(int i =0 ;i< size;i++)
cout<<a[i]<<" ";
cout<<endl;
}
int main(){
int a[]={2,3,5,1,2,7,9,12,5,3,0};
quick_sort(a,0,sizeof(a)/sizeof(int)-1);
printArr(a,sizeof(a)/sizeof(int));
}