基数排序复杂度是(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. Python 字符串与基本语句

    Python特点 python中没有变量的声明 语句结束后没有分号 严格要求缩进 支持很长很长的大数运算(直接在Idle中输入即可) 用"#"来注释 BIF:Bulit-in fu ...

  2. 【IdentityServer4文档】- 支持和咨询选项

    支持和咨询选项 我们为 IdentityServer 提供多个免费和商业支持及咨询选项. 免费支持 免费支持是基于社区的,而且使用的是公共论坛 StackOverflow 有越来越多的使用 Ident ...

  3. python学习笔记01:安装python

    下载python: 从从https://www.python.org/downloads/下载python,根据操作系统的不同,选择不同的版本下载.注意:linux系统大多预装了python,可以直接 ...

  4. 第二章 shell的语法

    变量:字符串.数字.环境和参数 获取变量内容可以在变量前使用$字符,使用echo指令可以将变量内容输出到终端. wuchao@wuchao-Lenovo:~$ var=hello wuchao@wuc ...

  5. Swift-枚举enum理解

    //定义一个枚举 //枚举的语法,enum开头,每一行成员的定义使用case关键字开头,一行可以定义多个关键字 enum CompassPoint { case North case South ca ...

  6. [剑指Offer] 66.机器人的运动范围

    题目描述 地上有一个m行和n列的方格.一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子. 例如,当k为18时,机器人能 ...

  7. Visual Stdio 2015打包安装项目的方法(使用Visual Studio Installer)

    首先在官网下载VS2015的Visual Studio Installer 1.创建安装项目 里面最左侧的框框有三个文件夹 1.“应用程序文件夹”即"Application Folder&q ...

  8. 当提交的表单类型为multipart/form-data时 后台的dopost则不能使用 setCharset来进行解码了 需要单独对字段使用 原始的new String(req.name("ISO-8859-1"),"utf-8")形式解码了

    当提交的表单类型为multipart/form-data时 后台的dopost则不能使用 setCharset来进行解码了 需要单独对字段使用 原始的new String(req.name(" ...

  9. bzoj 2140: 稳定婚姻 (二分图)

    //========================== 蒟蒻Macaulish:http://www.cnblogs.com/Macaulish/  转载要声明! //=============== ...

  10. BZOJ4299 & CC FRBSUM:ForbiddenSum & BZOJ4408 & 洛谷4587 & LOJ2174:[FJOI2016]神秘数——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4299 https://www.lydsy.com/JudgeOnline/problem.php? ...