快速排序

快速排序的核心在与找到驱轴后,根据驱轴大小对数组重新排序,如果是从小到大排序:将小的放在驱轴左边,大的放在驱轴右边,这样完成一轮了。然后第二轮同样的,把驱轴左边数组和右边数组的也进行这样的操作,直到数组只剩下一个值了,那就不用排序了。该选取过程是一个递归过程,每次选取的驱轴其实就是该数排序的位置。经过几轮递归找到所有驱轴放到相应位置,便完成了排序。

#include"iostream"
using namespace std;
const int n = 10;
void swap(int &a,int &b){
    int t = a;
    a = b;
    b = t;
}
void show(int *a,int n){
    for(int i = 0;i < n;i++){
        cout<<a[i]<<ends;
    }
    cout<<endl;
}
/*****************************/
//选取第一个点作为驱轴
void Qsort(int *a,int l,int r){
    int p = a[l];
    int i = l,j = r + 1;
    if(l >= r){
        return ;
    }
    while(i < j){        //i == j 就退出循环
        while(i < j && a[++i] < p);        //取左边第一个大与驱轴的值
        while(i < j && a[--j] > p);        //取右边第一个小与驱轴的值
        if(i < j){
            swap(a[i],a[j]);            //交换大值与小值
        }
    }
    swap(a[i - 1],a[l]);        //恢复驱轴
    Qsort(a,l,i - 1);
    Qsort(a,i,r);

}
void quicksort(int *a,int n){
    Qsort(a,0,n - 1);
}
/*******************************/
int main(){
    int a[n] = {6  ,1 , 2, 7,  9,  3,  4,  5, 10,  8};
    //int a[n] = {1,2,3,4,5,6,7,8,9,10};
    //int a[n] = {10,9,8,7,6,5,4,3,2,1};
    //int a[n] = {1,3,5,7,9,2,4,6,8,10};
    show(a,n);
    quicksort(a,n);
    show(a,n);
    return 0;
}

 

posted @ 2018-05-30 17:10  oleolema  阅读(145)  评论(0编辑  收藏  举报