您的位置:首页 > 财经 > 金融 > 汕头网络推广教程_东莞怎样制作免费网页_百度推广联系人_百度写作助手

汕头网络推广教程_东莞怎样制作免费网页_百度推广联系人_百度写作助手

2024/11/18 13:28:57 来源:https://blog.csdn.net/weixin_70911613/article/details/142576915  浏览:    关键词:汕头网络推广教程_东莞怎样制作免费网页_百度推广联系人_百度写作助手
汕头网络推广教程_东莞怎样制作免费网页_百度推广联系人_百度写作助手

快速排序

基本思路

选取中间位置为基准从两边开始遍历,(这里以从小到大为例)左边·遇到第一个大于基准数的记录下标,右边遇到第一个小于基准数的记录下标,然后交换这两个数,重复以上操作直至到达中间位置(***说明一下为啥选取中间位置为基准,假如选取第一位数为基准,假如右边的都比他小,运算量增大,这样时间复杂度会变高)***然后,以基准数为分界线,将区间分成两部分,每个区间重复以上操作。

以洛谷P1177 【模板】排序为例

将读入的 N 个数从小到大排序后输出。
输入格式
第一行为一个正整数 N
第二行包含 N 个空格隔开的正整数 a i,为你需要进行排序的数。
输出格式
将给定的 N 个数从小到大输出,数之间空格隔开,行末换行且无空格。
若不选取中间数为基准便会超时。
代码如下:
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+30;
int k[N];
void kp(int l,int r)
{
if(l>r)return ;//排序完成结束条件
int re=r,le=l;
int te=k[(r+l)/2];//选取基准数
while(le<=re)
{
while(k[le]<te)le++;
while(k[re]>te)re–;
if(le<=re)
{
swap(k[le],k[re]);
le++;re–;
}
}
kp(l,re);
kp(le,r);
}
int main()
{
int n;cin>>n;
for(int i=0;i<n;i++)
cin>>k[i];
kp(0,n-1);
for(int j=0;j<n-1;j++)
cout<<k[j]<<" ";
cout<<k[n-1]<<endl;
return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com