raptor输入n个数据排序_机房解疑 | 归并排序

当当当~

又到了解疑的时候啦~

今天给小伙伴们讲一下

归并排序

abac57c0fac1600b74f5221f3cdc56c6.gif 2f38b72a477aacaabeb14313af8f5f30.png e7dd9a57fe463d897073d44eda71b54e.png

首先我们来看一下题目

有 n 组数据,输入这些数据,然后将他们从小到大排列并输出

输入要求

第一行输入一个正整数 n(3<=n<=10000),第二行输入 n 个数

输出要求

从小到大输出

输入样例

5

52 68 94 75 46

输出样例

46 52 68 75 94

2f489bd931c495911c8f0bb424bb2566.png

解题思路

排序的方法有很多,有冒泡排序,插入排序,选择排序,桶排序,快速排序,桶排序,归并排序等,每一种排序都有每一种排序的特点。

随时数据量的增加,很多排序都会出现超时的现象(时间复杂度)。快速排序虽然运行时间较快,但稳定性不是很好,处理极端数据会出一些问题。那归并排序就很好地解决了稳定性的问题,同时也不会超时。

核心思路:二分和递归

下面是参考代码~

2eba5588a15c17088caa40d42d9bb332.gif "

#include

using namespace std;

int a[10005],r[10005];

void msort(int s,int t)

{

if(s==t) return;

int mid=(s+t)/2;

msort(s,mid);

msort(mid+1,t);

int i=s,j=mid+1,k=s;

while(i<=mid&&j<=t)

{

if(a[i]<=a[j])

{

r[k]=a[i];

k++;

i++; 

else

{

r[k]=a[j];

k++;

j++; 

}

while(i<=mid)

{

r[k]=a[i];

k++;

i++; 

}

while(j<=t)

{

r[k]=a[j];

k++;

j++; 

}

for(i=s;i<=t;i++) a[i]=r[i]; 

int main()

{

int n,i;

cin>>n;

for(i=1;i<=n;i++)

cin>>a[i];

msort(1,n);

for(i=1;i<=n;i++)

cout<

" ▼   点击了解更多详情   ▼喜报 | CCF CSP-J/S 2019第二轮认证评级,机房日子编程再创佳绩 !机房解疑 | 快速排序机房解疑 | 搜索 - 全排列机房解疑 | 高精度运算,不简单的A+B机房解疑 | 递归 - 汉诺塔问题机房解疑 | 约瑟夫问题 - 猴子选大王寒假招生 | 搜索基础课程与动态规划基础课程新一期的C++编程基础课程开始招生了!更多优惠等你来领取! 扫描下方二维码,咨询相关信息

c0eeb2e42f2953c2eefd92a354dd7640.png

微信二维码—刘老师

手机号:13817160526

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值