洛谷 P1177 【模板】快速排序

题目链接
思路:
二分思想,分成两半。
一半都小于数组中的某个数,一半大于那个数。
不断细分,每次都会变成一半的一半(用递归)
当无法变一半时,就说明已经结束(无法递归了,排序问题就结束了)
大佬的洛谷号
来自大佬的代码

#include<iostream>
using namespace std;
int a[10000011];
void qs(int l,int r)
{
    int mid=a[(l+r)/2];
    int i=l,j=r;
    do{
        while (a[i]<mid) i++;
        while (a[j]>mid) j--;
        if(i<=j)
        {
            swap(a[i],a[j]);
            i++;
            j--;    //用来保证左小右大,同时也为退出while循环提供条件
        }
    }while (i<=j);   //大佬说=号一定要加,但不带=号时洛谷也能过
    if(l<j) qs(l,j);   //再排左边的数,当只有
    if(i<r) qs(i,r);  //再排右边的数
}
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
     cin>>a[i];
     qs(1,n);
    for(int i=1;i<=n;i++)
      cout<<a[i]<<" ";
return 0;
}

学大佬的代码也是学习。滑稽

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值