#include<bits/stdc++.h>
using namespace std;
int n;
int a[100010];
void merge_sort(int l,int r){
if(l>=r) return;
int mid = (l+r)/2;
merge_sort(l,mid);
merge_sort(mid+1,r);
vector<int> v;
int i = l;
int j = mid+1;
while(i<=mid && j<=r){
if(a[i] <= a[j]){
v.push_back(a[i++]);
}else{
v.push_back(a[j++]);
}
}
while(i<=mid){
v.push_back(a[i++]);
}
while(j<=r){
v.push_back(a[j++]);
}
int idx = l;
for(int x:v){
a[idx++] = x;
}
}
int main(){
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
merge_sort(0,n-1);
for(int i=0;i<n;i++) cout<<a[i]<<" ";
return 0;
}
AcWing 787. 归并排序
归并排序详解
最新推荐文章于 2025-01-26 17:23:01 发布
本文介绍了一种高效的排序算法——归并排序,并通过C++代码实现展示了其工作原理。归并排序采用分治策略,递归地将数组分成两半,然后合并已排序的子数组。文章还提供了一个完整的归并排序程序示例。

203

被折叠的 条评论
为什么被折叠?



