基数排序复杂度是(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. Java常用类之File类

    File 类: 1. java.io.File 类代表系统文件名(路径名.文件名); 2. File 类常见的构造方法: 2.1. File(String pathname):通过将给定路径名字符串转 ...

  2. GPS定位,经纬度附近地点查询–C#实现方法

              摘要:目前的工作是需要手机查找附近N米以内的商户,功能如下图数据库中记录了商家在百度标注的经纬度(如:116.412007,39.947545),最初想法以圆心点为中心点,对半径做 ...

  3. Node js MongoDB简单操作

    //win7环境下node要先安装MongoDB的相关组件(非安装MongoDB数据库),在cmd命令行进入node项目目录后执行以下语句 //npm install mongodb //创建连接 v ...

  4. 制作QQ微信支付宝三合一收款码

    转载:http://blog.mambaxin.com/article/56 发现很多博客都带了打赏功能,虽说打赏的人可能很少,但始终是一份心意,能让博主知道自己写的文章有用,能够帮助到人.所以,我也 ...

  5. go的IO函数,整理下最基本的IO处理函数,工欲善其事必先利其器

    bufio.NewScanner()函数是一行一行地读,但是对/proc/函数,这里不是个好方法,最好是把所有的数据一次读完,然后再去读,有没有这样读的接口呢?把所有数据都读入到内存中然后再通过通过搜 ...

  6. 【.Net】C#文本文件(.txt)读写

    目录 前言 读取txt文件 写入txt文件 前言 计算机在最初只支持ASCII编码,但是后来为了支持其他语言中的字符(比如汉字)以及一些特殊字符(比如€),就引入了Unicode字符集.基于Unico ...

  7. 9.1、AutoEncoder自动编码器[转]

    如果给定一个神经网络,我们假设其输出与输入是相同的,然后训练调整其参数,得到每一层中的权重.自然地,我们就得到了输入I的几种不同表示(每一层代表一种表示),这些表示就是特征.自动编码器就是一种尽可能复 ...

  8. P1667 数列

    题目描述 给定一个长度是n的数列A,我们称一个数列是完美的,当且仅当对于其任意连续子序列的和都是正的.现在你有一个操作可以改变数列,选择一个区间[X,Y]满足Ax +Ax+1 +…+ AY<0, ...

  9. Html CSS学习(五)position定位 原

    Html CSS学习(五)position定位 position用来对元素进行定位,其值有以下几种: static:无特殊定位,对象遵循正常文档流,top,right,bottom,left等属性不会 ...

  10. BZO4197 & 洛谷2150 & UOJ129:[NOI2015]寿司晚宴——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4197 https://www.luogu.org/problemnew/show/P2150 ht ...