快速排序+分治法

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int a[maxn],n;
int parti(int a[],int  l,int r)
{
    int x=a[l];//以第一个为基准
    while(l<r)
    {
        while(l<r&&a[r]>=x)r--;//小于放左边
        a[l]=a[r];
        while(l<r&&a[l]<=x)l++;//大于放右边
        a[r]=a[l];
    }
    a[l]=x;
    return l;
}
void quick_sort(int a[],int l,int r)//递归排序
{
    if(l<r)
    {
        int p=parti(a,l,r);
        quick_sort(a,l,p-1);
        quick_sort(a,p+1,r);
    }
}
int main()
{
    cout<<"请输入数据个数"<<endl;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    quick_sort(a,0,n-1);
    for(int i=0;i<n;i++)
    {
        cout<<a[i]<<' ';
    }
    cout<<endl;
}

posted @ 2017-12-25 19:04  lhclqslove  阅读(235)  评论(0编辑  收藏  举报