code:
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int N = 1e5 + 10; typedef long long LL; LL q[N],tmp[N]; int n; void merge_sort(LL * q,int l,int r){ //边界判断 if(l>=r) return; //递归处理子问题 int mid = l+r>>1; merge_sort(q,l,mid);merge_sort(q,mid+1,r); //合并 int i=l,j=mid+1,k=0; 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,k=0;i<=r;i++,k++) q[i] = tmp[k]; } int main(){ scanf("%d",&n); for(int i=0;i<n;i++) scanf("%lld",&q[i]); merge_sort(q,0,n-1); for(int i=0;i<n;i++) printf("%lld ",q[i]); return 0; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步