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

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

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

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

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. int read(){
  5. int ans=,f=,c=getchar();
  6. while(c<''||c>''){if(c=='-') f=-; c=getchar();}
  7. while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
  8. return ans*f;
  9. }
  10. const int N=2e5+,B=;
  11. int *s[],*mp;
  12. int n,t[],b[N],a[N];
  13. int main(){
  14. n=read(); for(int i=;i<n;i++) a[i]=read();
  15. memset(t,,sizeof(t)); mp=b;
  16. for(int i=;i<n;i++) ++t[a[i]&];
  17. for(int i=;i<B;i++) s[i]=mp,mp+=t[i];
  18. for(int i=;i<n;i++) *s[a[i]&]++=a[i];
  19. memset(t,,sizeof(t)); mp=a;
  20. for(int i=;i<n;i++) ++t[b[i]>>];
  21. for(int i=;i<B;i++) s[i]=mp,mp+=t[i];
  22. for(int i=;i<n;i++) *s[b[i]>>]++=b[i];
  23. for(int i=;i<n;i++) printf("%d ",a[i]);
  24. return ;
  25. }

其实排结构体也差不多呢

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. int read(){
  5. int ans=,f=,c=getchar();
  6. while(c<''||c>''){if(c=='-') f=-; c=getchar();}
  7. while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
  8. return ans*f;
  9. }
  10. const int N=2e5+,B=;
  11. struct pos{int v;};
  12. pos *s[],*mp;
  13. pos b[N],a[N];
  14. int n,t[];
  15. int main(){
  16. n=read(); for(int i=;i<n;i++) a[i].v=read();
  17. memset(t,,sizeof(t)); mp=b;
  18. for(int i=;i<n;i++) ++t[a[i].v&];
  19. for(int i=;i<B;i++) s[i]=mp,mp+=t[i];
  20. for(int i=;i<n;i++) *s[a[i].v&]++=a[i];
  21. memset(t,,sizeof(t)); mp=a;
  22. for(int i=;i<n;i++) ++t[b[i].v>>];
  23. for(int i=;i<B;i++) s[i]=mp,mp+=t[i];
  24. for(int i=;i<n;i++) *s[b[i].v>>]++=b[i];
  25. for(int i=;i<n;i++) printf("%d ",a[i].v);
  26. return ;
  27. }

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

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

代码待填

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. int read(){
  5. int ans=,f=,c=getchar();
  6. while(c<''||c>''){if(c=='-') f=-; c=getchar();}
  7. while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
  8. return ans*f;
  9. }
  10. const int N=2e5+,B=;
  11. struct pos{int l,r;};
  12. pos *s[],*mp;
  13. pos b[N],a[N];
  14. int n,t[];
  15. int main(){
  16. n=read(); for(int i=;i<n;i++) a[i].l=read(),a[i].r=read();
  17. memset(t,,sizeof(t)); mp=b;
  18. for(int i=;i<n;i++) ++t[a[i].r&];
  19. for(int i=;i<B;i++) s[i]=mp,mp+=t[i];
  20. for(int i=;i<n;i++) *s[a[i].r&]++=a[i];
  21. memset(t,,sizeof(t)); mp=a;
  22. for(int i=;i<n;i++) ++t[b[i].r>>];
  23. for(int i=;i<B;i++) s[i]=mp,mp+=t[i];
  24. for(int i=;i<n;i++) *s[b[i].r>>]++=b[i];
  25. memset(t,,sizeof(t)); mp=b;
  26. for(int i=;i<n;i++) ++t[a[i].l&];
  27. for(int i=;i<B;i++) s[i]=mp,mp+=t[i];
  28. for(int i=;i<n;i++) *s[a[i].l&]++=a[i];
  29. memset(t,,sizeof(t)); mp=a;
  30. for(int i=;i<n;i++) ++t[b[i].l>>];
  31. for(int i=;i<B;i++) s[i]=mp,mp+=t[i];
  32. for(int i=;i<n;i++) *s[b[i].l>>]++=b[i];
  33. for(int i=;i<n;i++) printf("[%d %d]\n",a[i].l,a[i].r);
  34. return ;
  35. }
  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. int read(){
  5. int ans=,f=,c=getchar();
  6. while(c<''||c>''){if(c=='-') f=-; c=getchar();}
  7. while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
  8. return ans*f;
  9. }
  10. const int N=2e5+,B=;
  11. struct pos{int l,r;};
  12. pos *s[],*mp;
  13. pos b[N],a[N];
  14. int n,t[];
  15. int main(){
  16. n=read();
  17. for(int i=;i<n;i++) a[i].l=read(),a[i].r=read();
  18. memset(t,,sizeof(t)); mp=b;
  19. for(int i=;i<n;i++) ++t[a[i].r&];
  20. for(int i=;i<B;i++) s[i]=mp,mp+=t[i];
  21. for(int i=;i<n;i++) *s[a[i].r&]++=a[i];
  22. memset(t,,sizeof(t)); mp=a;
  23. for(int i=;i<n;i++) ++t[b[i].r>>];
  24. for(int i=;i<B;i++) s[i]=mp,mp+=t[i];
  25. for(int i=;i<n;i++) *s[b[i].r>>]++=b[i];
  26. memset(t,,sizeof(t)); mp=b;
  27. for(int i=;i<n;i++) ++t[a[i].l&];
  28. for(int i=;i<B;i++) s[i]=mp,mp+=t[i];
  29. for(int i=;i<n;i++) *s[a[i].l&]++=a[i];
  30. memset(t,,sizeof(t)); mp=a;
  31. for(int i=;i<n;i++) ++t[b[i].l>>];
  32. for(int i=;i<B;i++) s[i]=mp,mp+=t[i];
  33. for(int i=;i<n;i++) *s[b[i].l>>]++=b[i];
  34. for(int i=;i<n;i++) printf("[%d %d]\n",a[i].l,a[i].r);
  35. return ;
  36. }

存一下ccz的代码

大小为1e6范围内的

  1. #include<bits/stdc++.h>
  2. const int N=1e8,B=;
  3. int a[N],*ls[],*rs[],t[],b[N],*mp;
  4. int main(){
  5. for(int i=;i<N;++i)a[i]=(rand()^rand()<<)%;//generate data
  6. int tt=clock();
  7. //radix sort int in range[0,1e6)
  8. memset(t,,sizeof(t));
  9. mp=b;
  10. for(int i=;i<N;++i)++t[a[i]&];
  11. for(int i=;i<B;++i)ls[i]=rs[i]=mp,mp+=t[i];
  12. for(int i=;i<N;++i)*rs[a[i]&]++=a[i];
  13. memset(t,,sizeof(t));
  14. mp=a;
  15. for(int i=;i<N;++i)++t[b[i]>>];
  16. for(int i=;i<B;++i)ls[i]=rs[i]=mp,mp+=t[i];
  17. for(int i=;i<N;++i)*rs[b[i]>>]++=b[i];
  18. //the result is in a
  19. printf("%g s",(clock()-tt)*./CLOCKS_PER_SEC);
  20. return ;
  21. }

大小为1e9范围内的

  1. #include<bits/stdc++.h>
  2. const int N=1e8,B=;
  3. int a[N],*ls[],*rs[],t[],b[N],*mp;
  4. int main(){
  5. for(int i=;i<N;++i)a[i]=(rand()^rand()<<)%;//generate data
  6. int tt=clock();
  7. //radix sort int in range[0,1e9)
  8. memset(t,,sizeof(t));
  9. mp=b;
  10. for(int i=;i<N;++i)++t[a[i]&];
  11. for(int i=;i<B;++i)ls[i]=rs[i]=mp,mp+=t[i];
  12. for(int i=;i<N;++i)*rs[a[i]&]++=a[i];
  13. memset(t,,sizeof(t));
  14. mp=a;
  15. for(int i=;i<N;++i)++t[b[i]>>&];
  16. for(int i=;i<B;++i)ls[i]=rs[i]=mp,mp+=t[i];
  17. for(int i=;i<N;++i)*rs[b[i]>>&]++=b[i];
  18. memset(t,,sizeof(t));
  19. mp=b;
  20. for(int i=;i<N;++i)++t[a[i]>>];
  21. for(int i=;i<B;++i)ls[i]=rs[i]=mp,mp+=t[i];
  22. for(int i=;i<N;++i)*rs[a[i]>>]++=a[i];
  23. //the result is in b
  24. printf("%g s",(clock()-tt)*./CLOCKS_PER_SEC);
  25. return ;
  26. }

基数排序——尚未补完的坑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 上实现非root的 Traceroute -- 非Root权限下移植可执行二进制文件 脚本文件

    作者 : 万境绝尘 转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/36438365 示例代码下载 : -- CSDN : htt ...

  2. 总结Canvas和SVG的区别

    参考链接: 菜鸟教程 HTML5 内联SVG 经典面试题(讨论canvas与svg的区别) Canvas SVG 通过 JavaScript 来绘制 2D 图形 是一种使用 XML 描述 2D 图形的 ...

  3. Spring管理事务默认回滚的异常

    一.默认方式 Spring的事务管理默认只对出现运行期异常(java.lang.RuntimeException及其子类),Error进行回滚. 如果一个方法抛出Exception或者Checked异 ...

  4. 3DMAX2016安装教程【图文】

    下载安装包之后,双击setup.exe. 下面是安装图片教程: 点击安装 点击下一步. 如图输入序列号和产品密钥. 填写安装路径,然后下一步. 开始安装,等待. 安装成功.

  5. setsockopt 设置socket 详细用法

    1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO ...

  6. struts如何在Action类中操作request,session

    在servlet中,通过request.getparameter与setparameter来实现后端与前端jsp页面的数据交互,那么在struts中,也有几种方式来操作request,session实 ...

  7. dedecms给原模型添加新字段

    1.进入dedecms后台 2.点击核心=>频道模型=>内容模型管理(在这里可以看到dedecms预设的模型设置) 3.选中我们需要的模型,点击更改,跳入以下页面 4.点击字段管理(可以看 ...

  8. SPFA判負環

    馬上就退役了,時間不足就不多介紹了 反正DFS是會T飛的,BFS就沒關係了qwq #include<cmath> #include<queue> #include<cst ...

  9. python 内存分析

    1.改源码重新编译打印相关信息 obmalloc.c 文件中打印 maxarenas,值为当前环境分配 arena 个数:分配 arena 时并没有马上分配对应的pools,故对于每一个 arena, ...

  10. [转载]看看大牛们是怎样获得英文综述(reviews)的?

    对于做实验的童鞋来说,平时看综述必不可少,可是如何获得自己想要的却并不是一件容易的事情,这里整理并推荐几种行之有效的方法: 1. http://www.annualreviews.org/,这是一个顶 ...