#include<iostream>
using namespace std;
const int N = 1000010;
int n;
int q[N],temp[N];
void merge_sort(int 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 k=0,i=l,j=mid+1;
while(i<=mid && j<=r){
if(q[i] <= q[j]) temp[k++] = q[i++];
else temp[k++] = q[j++];
}
//将剩下的放入temp中
while(i<=mid) temp[k++]=q[i++];
while(j<=r) temp[k++]=q[j++];
//将整理后temp中的元素放入到q中
for(i=l,j=0;i<=r;i++,j++){
q[i]=temp[j];
}
}
int main (){
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]);
return 0;
}
【算法】归并排序
最新推荐文章于 2024-08-12 19:32:44 发布
该博客详细介绍了如何使用C++实现归并排序算法,包括分治策略、递归调用以及数组合并的过程。通过示例代码展示了从输入数组到排序完成的整个流程,并在主函数中对输入数据进行排序输出,适用于理解与学习排序算法。
摘要由CSDN通过智能技术生成