随手写写之快速排序

#include<iostream>
#include<cstdio>
using namespace std;
const int N=25;
void sort(int *a,int left,int right)
{
    if(left>=right)//结束条件,left可能会大于right的,因为sort(a,left,i-1)
        return ;
    int i=left,j=right;
    int key=a[left];
    while(i<j)
    {
        while(i<j&&key<=a[j])
        {
            j--;//从右侧开始寻找比key小的下标
        }
        a[i]=a[j];
        while(i<j&&key>=a[i])
        {
            i++;//从左侧寻找比KEY大的下标
        }
        a[j]=a[i];
    }
    a[i]=key;
    sort(a,left,i-1);
    sort(a,i+1,right);
}
int main()
{
    int n,a[N];
    cin>>n;
    for(int i=0;i<n;i++)
        scanf("%d",&a[i]);
    sort(a,0,n-1);
    for(int i=0;i<n;i++)
        printf("%d ",a[i]);
}

猜你喜欢

转载自blog.csdn.net/salmonwilliam/article/details/81148612
今日推荐