归并排序 与 快排 模板

归并排序:复杂度nlogn
快排:复杂度一般情况下nlogn 最坏情况下 n*n
归并排序:

//可以用于求解逆序数
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double db;
typedef pair<int,int> pii;
typedef vector<int> vi;
#define de(x) cout << #x << "=" << x << endl
#define rep(i,a,b) for(int i=a;i<(b);++i)
#define all(x) (x).begin(),(x).end()
#define sz(x) (int)(x).size()
#define mp make_pair
#define pb push_back
#define fi first
#define se second
const int N = 5e5+5;
int a[N],b[N];
int ans=0;
void merge(int l,int mid,int r)
{
	int i,j,k;
	k=l;i=l;j=mid+1;
	while(i<=mid&&j<=r)
	{
		if(a[i]>a[j]) 
		{
			b[k++]=a[j++];
			ans+=mid-i+1;
		}
		else 
		{
			b[k++]=a[i++];
		}
	}
	while(i<=mid) b[k++]=a[i++];
	while(j<=r) b[k++]=a[j++];
	for(i=l;i<=r;i++) a[i]=b[i];
}
void mergesort(int l,int r)
{
	int mid=(l+r)>>1;
	if(l==r) return;
	mergesort(l,mid);
	mergesort(mid+1,r);
	merge(l,mid,r);
}
int main()
{
	int n;
	while(1)
	{
		scanf("%d",&n);
		if(n==0) break;
		ans=0;
		for(int i=1;i<=n;i++)
		{
			scanf("%d",&a[i]); 
		}
		mergesort(1,n);
		cout<<ans<<endl;
	}
	return 0;
}

快排:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double db;
typedef pair<int,int> pii;
typedef vector<int> vi;
#define de(x) cout << #x << "=" << x << endl
#define rep(i,a,b) for(int i=a;i<(b);++i)
#define all(x) (x).begin(),(x).end()
#define sz(x) (int)(x).size()
#define mp make_pair
#define pb push_back
#define fi first
#define se second
const int N = 1e5+5;
int a[N];
int partition(int l,int r)
{
	int i=l-1,j=r,temp;
	int tmp=a[r];
	/*将大于等于x的元素交换到右区域*/
	/*小于等于交换到左区域*/
	while(1)
	{
		while(a[++i]<tmp);
		while(tmp<a[--j]) if(j==l) break;
		if(i>=j) break;
		temp=a[i];
		a[i]=a[j];
		a[j]=temp;
	}
	temp=a[r];
	a[r]=a[i];
	a[i]=temp;
	return i;
}
void qsort(int l,int r)
{
	int i;
	if(r<=l) return ;
	i = partition(l,r);
	qsort(l,i-1);
	qsort(i+1,r);
} 

int main()
{
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
	qsort(1,n);
	for(int i=1;i<=n;i++) printf("%d%c",a[i],i==n ? '
':' ');
}
原文地址:https://www.cnblogs.com/q1076452761/p/7711275.html