基数排序复杂度是(n+b)logn/logb

我们找一个基数 每次处理一部分位 从低位到高位处理

t是出现次数 s是这个桶管辖的起点 然后就可以写了

不过我这里是指针版的 有点难看

#include<cstdio>
#include<cstring>
#include<algorithm>
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
const int N=2e5+,B=;
int *s[],*mp;
int n,t[],b[N],a[N];
int main(){
n=read(); for(int i=;i<n;i++) a[i]=read();
memset(t,,sizeof(t)); mp=b;
for(int i=;i<n;i++) ++t[a[i]&];
for(int i=;i<B;i++) s[i]=mp,mp+=t[i];
for(int i=;i<n;i++) *s[a[i]&]++=a[i];
memset(t,,sizeof(t)); mp=a;
for(int i=;i<n;i++) ++t[b[i]>>];
for(int i=;i<B;i++) s[i]=mp,mp+=t[i];
for(int i=;i<n;i++) *s[b[i]>>]++=b[i];
for(int i=;i<n;i++) printf("%d ",a[i]);
return ;
}

其实排结构体也差不多呢

#include<cstdio>
#include<cstring>
#include<algorithm>
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
const int N=2e5+,B=;
struct pos{int v;};
pos *s[],*mp;
pos b[N],a[N];
int n,t[];
int main(){
n=read(); for(int i=;i<n;i++) a[i].v=read();
memset(t,,sizeof(t)); mp=b;
for(int i=;i<n;i++) ++t[a[i].v&];
for(int i=;i<B;i++) s[i]=mp,mp+=t[i];
for(int i=;i<n;i++) *s[a[i].v&]++=a[i];
memset(t,,sizeof(t)); mp=a;
for(int i=;i<n;i++) ++t[b[i].v>>];
for(int i=;i<B;i++) s[i]=mp,mp+=t[i];
for(int i=;i<n;i++) *s[b[i].v>>]++=b[i];
for(int i=;i<n;i++) printf("%d ",a[i].v);
return ;
}

基数排序其实也可以做多关键字排序 不过要按关键字顺序倒着来

就是先处理第n关键字倒着处理到第1关键字

代码待填

#include<cstdio>
#include<cstring>
#include<algorithm>
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
const int N=2e5+,B=;
struct pos{int l,r;};
pos *s[],*mp;
pos b[N],a[N];
int n,t[];
int main(){
n=read(); for(int i=;i<n;i++) a[i].l=read(),a[i].r=read();
memset(t,,sizeof(t)); mp=b;
for(int i=;i<n;i++) ++t[a[i].r&];
for(int i=;i<B;i++) s[i]=mp,mp+=t[i];
for(int i=;i<n;i++) *s[a[i].r&]++=a[i];
memset(t,,sizeof(t)); mp=a;
for(int i=;i<n;i++) ++t[b[i].r>>];
for(int i=;i<B;i++) s[i]=mp,mp+=t[i];
for(int i=;i<n;i++) *s[b[i].r>>]++=b[i];
memset(t,,sizeof(t)); mp=b;
for(int i=;i<n;i++) ++t[a[i].l&];
for(int i=;i<B;i++) s[i]=mp,mp+=t[i];
for(int i=;i<n;i++) *s[a[i].l&]++=a[i];
memset(t,,sizeof(t)); mp=a;
for(int i=;i<n;i++) ++t[b[i].l>>];
for(int i=;i<B;i++) s[i]=mp,mp+=t[i];
for(int i=;i<n;i++) *s[b[i].l>>]++=b[i];
for(int i=;i<n;i++) printf("[%d %d]\n",a[i].l,a[i].r);
return ;
}
#include<cstdio>
#include<cstring>
#include<algorithm>
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
const int N=2e5+,B=;
struct pos{int l,r;};
pos *s[],*mp;
pos b[N],a[N];
int n,t[];
int main(){
n=read();
for(int i=;i<n;i++) a[i].l=read(),a[i].r=read();
memset(t,,sizeof(t)); mp=b;
for(int i=;i<n;i++) ++t[a[i].r&];
for(int i=;i<B;i++) s[i]=mp,mp+=t[i];
for(int i=;i<n;i++) *s[a[i].r&]++=a[i];
memset(t,,sizeof(t)); mp=a;
for(int i=;i<n;i++) ++t[b[i].r>>];
for(int i=;i<B;i++) s[i]=mp,mp+=t[i];
for(int i=;i<n;i++) *s[b[i].r>>]++=b[i];
memset(t,,sizeof(t)); mp=b;
for(int i=;i<n;i++) ++t[a[i].l&];
for(int i=;i<B;i++) s[i]=mp,mp+=t[i];
for(int i=;i<n;i++) *s[a[i].l&]++=a[i];
memset(t,,sizeof(t)); mp=a;
for(int i=;i<n;i++) ++t[b[i].l>>];
for(int i=;i<B;i++) s[i]=mp,mp+=t[i];
for(int i=;i<n;i++) *s[b[i].l>>]++=b[i];
for(int i=;i<n;i++) printf("[%d %d]\n",a[i].l,a[i].r);
return ;
}

存一下ccz的代码

大小为1e6范围内的

#include<bits/stdc++.h>
const int N=1e8,B=;
int a[N],*ls[],*rs[],t[],b[N],*mp;
int main(){
for(int i=;i<N;++i)a[i]=(rand()^rand()<<)%;//generate data
int tt=clock();
//radix sort int in range[0,1e6)
memset(t,,sizeof(t));
mp=b;
for(int i=;i<N;++i)++t[a[i]&];
for(int i=;i<B;++i)ls[i]=rs[i]=mp,mp+=t[i];
for(int i=;i<N;++i)*rs[a[i]&]++=a[i];
memset(t,,sizeof(t));
mp=a;
for(int i=;i<N;++i)++t[b[i]>>];
for(int i=;i<B;++i)ls[i]=rs[i]=mp,mp+=t[i];
for(int i=;i<N;++i)*rs[b[i]>>]++=b[i];
//the result is in a
printf("%g s",(clock()-tt)*./CLOCKS_PER_SEC);
return ;
}

大小为1e9范围内的

#include<bits/stdc++.h>
const int N=1e8,B=;
int a[N],*ls[],*rs[],t[],b[N],*mp;
int main(){
for(int i=;i<N;++i)a[i]=(rand()^rand()<<)%;//generate data
int tt=clock();
//radix sort int in range[0,1e9)
memset(t,,sizeof(t));
mp=b;
for(int i=;i<N;++i)++t[a[i]&];
for(int i=;i<B;++i)ls[i]=rs[i]=mp,mp+=t[i];
for(int i=;i<N;++i)*rs[a[i]&]++=a[i];
memset(t,,sizeof(t));
mp=a;
for(int i=;i<N;++i)++t[b[i]>>&];
for(int i=;i<B;++i)ls[i]=rs[i]=mp,mp+=t[i];
for(int i=;i<N;++i)*rs[b[i]>>&]++=b[i];
memset(t,,sizeof(t));
mp=b;
for(int i=;i<N;++i)++t[a[i]>>];
for(int i=;i<B;++i)ls[i]=rs[i]=mp,mp+=t[i];
for(int i=;i<N;++i)*rs[a[i]>>]++=a[i];
//the result is in b
printf("%g s",(clock()-tt)*./CLOCKS_PER_SEC);
return ;
}

基数排序——尚未补完的坑QAQ的更多相关文章

  1. PHP函数补完:stream_context_create()模拟POST/GET

    PHP函数补完:stream_context_create()模拟POST/GET PHP流的创建 在 2011年01月08日 那天写的     已经有 9408 次阅读了 感谢 参考或原文   服务 ...

  2. JavaScript函数补完:toString()

    javascript中的toString()方法,主要用于Array.Boolean.Date.Error.Function.Number等对象.下面是这些方法的一些解析和简单应用,做个纪律,以作备忘 ...

  3. 展开隐形的翅膀,WPR003N补完篇

    在上一回合要搞刷机!从它的尸体上踏过去!钢板云路由!WPR003N复活!成功启动OPENWRT中,笔者成功的让一个4年前主流芯片搭上OS的快船,留下一段佳话. 今天看着抽屉里的WPR003N,回忆它之 ...

  4. [TaskList] 省选前板子补完计划

    省选前本子补完计划 [ ] 带权并查集 [ ] 树上莫队 - UOJ58 [WC2013]糖果公园 loj2485「CEOI2017」Chase

  5. auto semicolon insertion 自动分号补齐的坑

    今天发现js自动分号补齐的坑,来看如下两段代码: function Hello(){ return { name: ’JavaScript’ }; } alert(Hello()); //输出unde ...

  6. 培训补坑(day7:线段树的区间修改与运用)(day6是测试,测试题解以后补坑QAQ)

    补坑咯~ 今天围绕的是一个神奇的数据结构:线段树.(感觉叫做区间树也挺科学的.) 线段树,顾名思义就是用来查找一段区间内的最大值,最小值,区间和等等元素. 那么这个线段树有什么优势呢? 比如我们要多次 ...

  7. bzoj Usaco补完计划(优先级 Gold>Silver>资格赛)

    听说KPM初二暑假就补完了啊%%% 先刷Gold再刷Silver(因为目测没那么多时间刷Silver,方便以后TJ2333(雾 按AC数降序刷 ---------------------------- ...

  8. QBXT 2017GoKing problems 补完计划

    10.11 Updata : 烦死了...麻烦死了...不补了..就这些吧 20171001 上: 100 + 90 + 90 = 280 = rank 8 T1 /* T1 从最大的数开始倒着枚举 ...

  9. 基于C/S架构的3D对战网络游戏C++框架 _06搭建C/S架构的基本通信框架(尚未写完会重新编辑后再发出)

    本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...

随机推荐

  1. android AndroidManifest.xml uses-feature 详解

    如果你是一个Android用户,而且你有一个老旧的安装有android 1.5 的android设备,你可 能会注意到一些高版本的应用没有在手机上的Android Market 中显示.这必定是应用使 ...

  2. 数据库索引(结合B-树和B+树)

    数据库索引,是数据库管理系统中一个排序的数据结构以协助快速查询.更新数据库表中数据.索引的实现通常使用B树及其变种B+树. 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种 ...

  3. YaoLingJump开发者日志(二)

      熟悉了一点LGame里的套路,可以正式开工了.   增加了一个信息栏,显示得分.硬币数.生命值和当前关卡(仿照了超级玛丽的布局).   准备瑶玲的各种动画(静止.奔跑.跳跃.趴下.休息和死亡等). ...

  4. docker中crontab无法运行

    yum install -y crontabssed -ri 's/.*pam_loginuid.so/#&/' /etc/pam.d/crond   vi /etc/pam.d/crond ...

  5. 【bzoj4444】[Scoi2015]国旗计划 倍增

    题目描述 给出一个圈和若干段,问:对于所有的 $i$ ,选择第 $i$ 段的情况下,最少需要选择多少段(包括第 $i$ 段)能够覆盖整个圈? 输入 第1行,包含2个正整数N,M,分别表示边防战士数量和 ...

  6. 【bzoj1579】[Usaco2009 Feb]Revamping Trails 道路升级 分层图最短路

    题目描述 每天,农夫John需要经过一些道路去检查牛棚N里面的牛. 农场上有M(1<=M<=50,000)条双向泥土道路,编号为1..M. 道路i连接牛棚P1_i和P2_i (1 < ...

  7. 【bzoj4698】[Sdoi2008] Sandy的卡片 后缀数组

    题目描述 Sandy和Sue的热衷于收集干脆面中的卡片.然而,Sue收集卡片是因为卡片上漂亮的人物形象,而Sandy则是为了积攒卡片兑换超炫的人物模型.每一张卡片都由一些数字进行标记,第i张卡片的序列 ...

  8. 【bzoj4721】[Noip2016]蚯蚓 乱搞

    题目描述 本题中,我们将用符号[c]表示对c向下取整,例如:[3.0」= [3.1」=[3.9」=3.蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓.蛐 ...

  9. Django 2.0 学习(05):Django Admin

    Django Admin 站点的管理者,而非访问者. 创建admin用户 首先,执行下面命令: python manage.py createsuperuser 其次,输入用户名和密码: Userna ...

  10. hdu 1115 Lifting the Stone (数学几何)

    Lifting the Stone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...