1.归并排序
主要运用到的的思想:分治、递归
功能:1.数组进行排序。
2.计算数组中的逆序对的个数。
时间复杂度:稳定的O(nlogn)
空间复杂度:O(n)
附上模板代码:
#include<bits/stdc++.h>
using namespace std;
long long Merge(int a[],int b[],int s,int m,int e){
int i=s,j=m+1,k=s;
long long ans=0;
while(i<=m && j<=e)
{
if(a[i]<=a[j])
b[k++]=a[i++];
else
{
b[k++]=a[j++];
//求逆序对
ans+=mid-i+1;}
}
while(i<=m)
b[k++]=a[i++];
while(j<=e)
b[k++]=a[j++];
for(int n=s;n<=e;n++)
a[n]=b[n];
return ans;
}
void mergesort(int a[],int b[],int s,int e){
long long ans=0;
if(s<e){
int m=(s+e)/2;
mergesort(a,b,s,m);
mergesort(a,b,m+1,e);
an