排序优化
查看原帖
排序优化
125454
CLCA_楼主2020/10/10 11:34

归并排序基于比较,常数较大。现在二进制优化一下。

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define pre(i,a,b) for(int i=a;i>=b;i--)
#define N 100005
using namespace std;
int a[N],n,b[N];
void solve(int l,int r,int k){
	if(l>=r||k<0)return ;
	int L=l,R=r;
	rep(i,l,r)if(1&(a[i]>>k))b[R--]=a[i];else b[L++]=a[i];
	rep(i,l,r)a[i]=b[i];
	solve(l,L-1,k-1);solve(L,r,k-1);
}
int main(){
	scanf("%d",&n);rep(i,1,n)scanf("%d",&a[i]);
	solve(1,n,30);
	rep(i,1,n)printf("%d ",a[i]);putchar('\n');
	return 0;
}
2020/10/10 11:34
加载中...