范沐垚


私信TA

用户名:dotcpp0614554

访问量:5203

签 名:

好大喜功

等  级
排  名 196
经  验 6613
参赛次数 0
文章发表 87
年  龄 18
在职情况 学生
学  校 看今夜 小楼灯宴
专  业 尽是良辰美眷

  自我简介:

沽名钓誉

//先排序后递归 左右边界要扩大1
#include<iostream>
using namespace std;
const int N=10010;
int n,a[N];
void quick_sort(int l,int r,int a[])
{
    if(l>=r)
        return;
    int i=l-1,j=r+1,x=a[l];//下边do while操作会先加,并且每次交换后是自动加一的,所以左右边界要扩大1
    while(i<j)
    {
        do i++;while(a[i]<x);//不能有等于
        do j--;while(a[j]>x);
        if(i<j)             //i跟j卡住之后,就交换
            swap(a[i],a[j]);
    }
    quick_sort(l,j,a);
    quick_sort(j+1,r,a);
}

int main(void)
{
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    quick_sort(1,n,a);//从两边开始
    for(int i=1;i<=n;i++)
        cout<<a[i]<<' ';
    return 0;
}


 

0.0分

1 人评分

  评论区

  • «
  • »