参考博客:https://www.cnblogs.com/chengxiao/p/6194356.html
sort不稳定。归并排序是较为稳定的一种排序算法
复杂度:nlogn
本排序的一个应用:HDU 4911 求逆序对数量:http://acm.hdu.edu.cn/showproblem.php?pid=4911
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; typedef long long ll; const int maxn=1e5+10; int a[maxn],c[maxn]; void merge_sort(int l,int r) { if(l>=r) return ; int md=l+r>>1; merge_sort(l,md); merge_sort(md+1,r); int i=l,j=md+1; //上面递归结束,返回了两个排好序的部分 int k=0; while(i<=md&&j<=r) { if(a[i]<a[j]) c[k++]=a[i++]; else c[k++]=a[j++]; } while(i<=md) //剩余部分 c[k++]=a[i++]; while(j<=r) c[k++]=a[j++]; for(i=l,j=0;i<=r;i++,j++)//j为c[]下标 a[i]=c[j]; } int main() { int n; 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]<<" "; }