基数排序——尚未补完的坑QAQ
基数排序复杂度是(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的更多相关文章
- PHP函数补完:stream_context_create()模拟POST/GET
PHP函数补完:stream_context_create()模拟POST/GET PHP流的创建 在 2011年01月08日 那天写的 已经有 9408 次阅读了 感谢 参考或原文 服务 ...
- JavaScript函数补完:toString()
javascript中的toString()方法,主要用于Array.Boolean.Date.Error.Function.Number等对象.下面是这些方法的一些解析和简单应用,做个纪律,以作备忘 ...
- 展开隐形的翅膀,WPR003N补完篇
在上一回合要搞刷机!从它的尸体上踏过去!钢板云路由!WPR003N复活!成功启动OPENWRT中,笔者成功的让一个4年前主流芯片搭上OS的快船,留下一段佳话. 今天看着抽屉里的WPR003N,回忆它之 ...
- [TaskList] 省选前板子补完计划
省选前本子补完计划 [ ] 带权并查集 [ ] 树上莫队 - UOJ58 [WC2013]糖果公园 loj2485「CEOI2017」Chase
- auto semicolon insertion 自动分号补齐的坑
今天发现js自动分号补齐的坑,来看如下两段代码: function Hello(){ return { name: ’JavaScript’ }; } alert(Hello()); //输出unde ...
- 培训补坑(day7:线段树的区间修改与运用)(day6是测试,测试题解以后补坑QAQ)
补坑咯~ 今天围绕的是一个神奇的数据结构:线段树.(感觉叫做区间树也挺科学的.) 线段树,顾名思义就是用来查找一段区间内的最大值,最小值,区间和等等元素. 那么这个线段树有什么优势呢? 比如我们要多次 ...
- bzoj Usaco补完计划(优先级 Gold>Silver>资格赛)
听说KPM初二暑假就补完了啊%%% 先刷Gold再刷Silver(因为目测没那么多时间刷Silver,方便以后TJ2333(雾 按AC数降序刷 ---------------------------- ...
- QBXT 2017GoKing problems 补完计划
10.11 Updata : 烦死了...麻烦死了...不补了..就这些吧 20171001 上: 100 + 90 + 90 = 280 = rank 8 T1 /* T1 从最大的数开始倒着枚举 ...
- 基于C/S架构的3D对战网络游戏C++框架_06搭建C/S架构的基本通信框架(尚未写完会重新编辑后再发出)
本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...
随机推荐
- Android 上实现非root的 Traceroute -- 非Root权限下移植可执行二进制文件 脚本文件
作者 : 万境绝尘 转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/36438365 示例代码下载 : -- CSDN : htt ...
- 总结Canvas和SVG的区别
参考链接: 菜鸟教程 HTML5 内联SVG 经典面试题(讨论canvas与svg的区别) Canvas SVG 通过 JavaScript 来绘制 2D 图形 是一种使用 XML 描述 2D 图形的 ...
- Spring管理事务默认回滚的异常
一.默认方式 Spring的事务管理默认只对出现运行期异常(java.lang.RuntimeException及其子类),Error进行回滚. 如果一个方法抛出Exception或者Checked异 ...
- 3DMAX2016安装教程【图文】
下载安装包之后,双击setup.exe. 下面是安装图片教程: 点击安装 点击下一步. 如图输入序列号和产品密钥. 填写安装路径,然后下一步. 开始安装,等待. 安装成功.
- setsockopt 设置socket 详细用法
1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO ...
- struts如何在Action类中操作request,session
在servlet中,通过request.getparameter与setparameter来实现后端与前端jsp页面的数据交互,那么在struts中,也有几种方式来操作request,session实 ...
- dedecms给原模型添加新字段
1.进入dedecms后台 2.点击核心=>频道模型=>内容模型管理(在这里可以看到dedecms预设的模型设置) 3.选中我们需要的模型,点击更改,跳入以下页面 4.点击字段管理(可以看 ...
- SPFA判負環
馬上就退役了,時間不足就不多介紹了 反正DFS是會T飛的,BFS就沒關係了qwq #include<cmath> #include<queue> #include<cst ...
- python 内存分析
1.改源码重新编译打印相关信息 obmalloc.c 文件中打印 maxarenas,值为当前环境分配 arena 个数:分配 arena 时并没有马上分配对应的pools,故对于每一个 arena, ...
- [转载]看看大牛们是怎样获得英文综述(reviews)的?
对于做实验的童鞋来说,平时看综述必不可少,可是如何获得自己想要的却并不是一件容易的事情,这里整理并推荐几种行之有效的方法: 1. http://www.annualreviews.org/,这是一个顶 ...