原题链接
归并算法的思路总结:
(1) 确定分界点
(2) 递归排序两边left right
(3) 合并两个数组
模板如下
#include
using namespace std;
const int N=100010;
int q[N];
int temp[N];
void merge_sort(int q[],int l,int r)
{
if(l >=r )
return ;
int k =(l+r)>>1;
merge_sort(q,l,k);
merge_sort(q,k+1,r);
int i=l,j=k+1,s=0;
while(i <= k && j<=r)
{
if(q[i]>=q[j])temp[s++]=q[j++];
else
temp[s++]=q[i++];
}
while(i <= k)temp[s++]=q[i++];
while(j <= r)temp[s++]=q[j++];
for(int i=l,j=0;i<=r;i++,j++)
{
q[i]=temp[j];
}
}
int main()
{
int n=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf ("%d",&q[i]);
}
merge_sort(q,0,n-1);
for(int i=0;i<n;i++)
{
printf("%d ",q[i]);
}
}