1 solutions
-
1
#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; }
- 1
Information
- ID
- 327
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 5
- Tags
- # Submissions
- 31
- Accepted
- 6
- Uploaded By