归并排序用递归实现[分治思想]
#include<iostream>
using namespace std;
const int maxn=1000;
int a[maxn],r[maxn];
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(int i=s;i<=t;i++)a[i]=r[i];
}
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;
}
追求吾之所爱