当当当~
又到了解疑的时候啦~
今天给小伙伴们讲一下
归并排序
首先我们来看一下题目
有 n 组数据,输入这些数据,然后将他们从小到大排列并输出
输入要求
第一行输入一个正整数 n(3<=n<=10000),第二行输入 n 个数
输出要求
从小到大输出
输入样例
5
52 68 94 75 46
输出样例
46 52 68 75 94
解题思路
排序的方法有很多,有冒泡排序,插入排序,选择排序,桶排序,快速排序,桶排序,归并排序等,每一种排序都有每一种排序的特点。
随时数据量的增加,很多排序都会出现超时的现象(时间复杂度)。快速排序虽然运行时间较快,但稳定性不是很好,处理极端数据会出一些问题。那归并排序就很好地解决了稳定性的问题,同时也不会超时。
核心思路:二分和递归
下面是参考代码~
"#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++编程基础课程开始招生了!更多优惠等你来领取! 扫描下方二维码,咨询相关信息微信二维码—刘老师
手机号:13817160526