超快速排序

#include<iostream>
#include<algorithm>
using namespace std;
const int N= 5e5+3e3;
using ll=long long ;
ll n,m,i,j,k,a[N],b[N],cnt=0;
void merge(ll a[],ll left,ll r){
	if(r-left<1){
		return;
	}
	ll mid=(left+r)>>1;
	merge(a,left,mid);
	merge(a,mid+1,r);
	ll i=left,j=mid+1;
	for(k=left;k<=r;++k){
		if(j>r||i<=mid&&a[i]<=a[j]){
			b[k]=a[i++];
		}else{
			cnt+=mid-i+1;
			b[k]=a[j++];
		}
	}
	for(k=left;k<=r;++k){
		a[k]=b[k];
	}
}
int main(){																																																																																																																																	
	ios::sync_with_stdio(false);
	cin.tie(0);
	while(cin>>n&&n){	//while have input 	and not zero																																																	
		for(i=1;i<=n;++i){ 
			cin>>a[i];
		}
		cnt=0;
		merge(a,1,n);
		cout<<cnt<<'\n';																																																
	}
	return 0;
}
posted @ 2022-03-20 20:25  ethon-wang  阅读(27)  评论(0编辑  收藏  举报