C++归并排序
什么是归并排序
归并排序的基本思想是:
先将序列一次次分成子序列,直到子序列长度为1;
再将已有序的子序列合并,得到完全有序的序列。
可以看出归并排序运用了 分而治之的思想
归并排序原理
首先把数组依次折半,
分成小的子数组,
直到每一个子数组的长度都为1;
然后合并子数组,
在合并的过程中进行排序;
如以下动画(@五分钟学算法大佬的动画,侵删)
C++中实现归并排序
从上方的原理和动画中不难看出,在归并排序中有很多重复的动作,很容易就让人想到用递归来做,不错,递归正是归并排序的最简做法,具体像下面这样。
#include<iostream>
using namespace std;
int a[101],d[101];
void msort(int l,int r)//归并函数
{
if(l==r)return;
int mid=(l+r)/2;//分界线
msort(l,mid)//拆分
msort(mid+1,r)
int i=l;p=l;j=mid+1;
while(i<=mid&&j<=r)//排序
{
if(a[i]>a[j])
d[p+t]=a[j+t];
else
d[p++]=a[i++];
}
while(i<=mid)//放回原数组
d[p++]=a[i++];
while(j<=r)
d[p++]=a[j++];
}
int main()
{
int n;
cin>>n;
for(int i=1;i<[=n;i++)
cin>>a[i];//输入
msort(1,n)
for(int i=1;i<=n;i++)
cout<<a[i]<<" ";
return 0;
}
结束语
谢谢大家的观看,有什么不明白的可以打在评论区,up是学生党,更新频率不定。