[模板]归并排序 |
|
这个问题要求我们使用归并排列
看看这个
a[i]<=10^9
算了,放弃了使用sort的想法(其实能过,但胜之不武)
那么
我们应该怎么做呢?
思路图如下
简单的说
就是拆开
拆
拆成2个一组
然后排
排
然后合并
合并再合并
然后就排好了
!
代码实现如下
#include<bits/stdc++.h>
using namespace std;
int n,a[100005],t[100005];
void mergesort(int l,int r){
if(l>=r) return;
int mid=(l+r)/2;
mergesort(l,mid);
mergesort(mid+1,r);
merge(a+l,a+mid+1,a+mid+1,a+r+1,t);
for(int i=l,j=0;i<=r;i++,j++) a[i]=t[j];
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%d",a+i);
mergesort(0,n-1);
for(int i=0;i<n;i++) printf("%d ",a[i]);
return 0;
}
谢谢