Information
- ID
- 327
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 5
- Tags
- # Submissions
- 31
- Accepted
- 6
- Uploaded By
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int q[N],tmp[N];
void merge_sort(int l,int r){
if(l==r) return; //小于等于1个元素
int mid=l+r>>1; //中点
merge_sort(l,mid); //左边
merge_sort(mid+1,r); //右边
int k=1,i=l,j=mid+1;
while(i<=mid&&j<=r) //合并
{
if(q[i]<=q[j]) tmp[k++]=q[i++]; //左边小于等于左边
else tmp[k++]=q[j++]; //右边小
}
while(i<=mid) tmp[k++]=q[i++]; //左边还剩余元素
while(j<=r) tmp[k++]=q[j++]; //右边还剩余元素
for(i=l,j=1;i<=r;i++,j++)
{
q[i]=tmp[j]; //还原到原来的位置
}
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>q[i];
}
merge_sort(1,n);
for(int i=1;i<=n;i++)
{
cout<<q[i]<<" ";
}
return 0;
}