首页 > 代码库 > 排序!——神奇的排序!!
排序!——神奇的排序!!
这是一个有趣的排序方法
我不知道该叫它什么。。桶排序??!!的确有桶排序的部分吧。
姑且叫它——桶升(升级版的桶排序)
这个算法我是从一个标程上看到的
第一次看的时候看不懂。
第二次看才发现它的奇妙
普通的桶排序满足不了a[i]>=1e8以上的情况。
可是这个“桶升”却能满足a[i]^(1/2)<1e8
并且它的复杂度和桶排一样是O(n)
我在洛谷上交了这样一题:【模板】快速排序
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int maxn=100010; const int num=32767; int n,a[maxn],nxt[maxn],cnt[num+1]; int get(int x,int k){ if(!k)return x# return (x>>15)# } void rsort(){ for(int k=0;k<=1;k++){ memset(cnt,0,sizeof(cnt)); for(int i=1;i<=n;i++)++cnt[get(a[i],k)]; for(int i=1;i<=num;i++)cnt[i]+=cnt[i-1]; for(int i=n;i;i--)nxt[cnt[get(a[i],k)]--]=a[i]; for(int i=1;i<=n;i++)a[i]=nxt[i]; } } int main() { scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d",&a[i]); rsort(); for(int i=1;i<=n;i++)printf("%d ",a[i]); return 0; }
跑得比一般的快得多。
本文由Yzyet编写,网址为www.cnblogs.com/Yzyet。非Yzyet同意,禁止转载,侵权者必究。
排序!——神奇的排序!!
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。