快速排序

快速排序

基本思想:

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

}

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