基数排序复杂度是(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. UML建模语言入门 -- 静态图详解 类图 对象图 包图 静态图建模实战

    发现个好东西思维导图, 最近开始用MindManager整理博客 . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/deta ...

  2. Mac OS安装Scrapy失败

    报错: DEPRECATION: Uninstalling a distutils installed project (six) has been deprecated and will be re ...

  3. 语音信号处理之动态时间规整(DTW)(转)

    这学期有<语音信号处理>这门课,快考试了,所以也要了解了解相关的知识点.呵呵,平时没怎么听课,现在只能抱佛脚了.顺便也总结总结,好让自己的知识架构清晰点,也和大家分享下.下面总结的是第一个 ...

  4. UVA 167 R-The Sultan's Successors

    https://vjudge.net/contest/68264#problem/R The Sultan of Nubia has no children, so she has decided t ...

  5. android gradle打包常见问题及解决方案

    背景: 问题: Q1: UNEXPECTED TOP-LEVEL ERROR: java.lang.OutOfMemoryError: Java heap space at com.android.d ...

  6. 修改CSV中的某些值

    file.csv文件如下,然后对其中某些值进行变换操作,刚学Powershell的时候操作起来很麻烦,现在看来其实就是对于哈希表的操作. col1,col2,col3,col4 text1,text2 ...

  7. phpcms找不到模板、空白模板的解决办法

    有时候会出现这个问题,尤其是在调试模板的过程中,不知道别的朋友的操作习惯.我的习惯是,先保留一份原始的模板.比如: index原版.html. 以便对比之用.但是呢,这样,往往会造成 找不到模板的情况 ...

  8. [计算机网络-传输层] 面向连接的传输:TCP

    参考:http://blog.csdn.net/macdroid/article/details/49070185 在学习TCP之前我们先来看一下可靠数据传输需要提供什么样的机制: ·差错检测机制:检 ...

  9. [剑指Offer] 49.把字符串转换成整数

    题目描述 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一个合法的数值则返回0  [思路]考虑所有特殊情况 1.数字前面有空格,如s="    12 ...

  10. set类型没有单独取值功能 通过循环取值

    set类型没有单独取值功能 通过循环取值