快速排序

橙三吉。 提交于 2020-02-28 12:48:59

快速排序

基本思想:

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

}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!