<转载>编程珠玑-位排序(bitsort)
然后作者在书后给出的答案确实很精辟,利用位排序将这个问题轻而易举的解决了。
Replace above 2 lines with below 3for word-parallel init
int top =1+ N/BITSPERWORD;
for (i =0; i < top; i++)
a[i] =0;
那么就采用这个,把a数组中的元素都设置为0.
1.每个整数有32位,那么它就可以表示32个数,分别对应每bit位为1.
2.然后把10000000个数分为1+N/BITSPERWORD组(相当于有这么多个桶),每组包含接近32个数。
arr[i>>SHIFT] |= (1<<(i&MASK))可以转化为
arr[i/32] = arr[i/32] | (1<<(i%32))
i%32必然处于区间[0, 31],那么1<<(i%32)就是将bit位1向前移动(i%32)位,然后和arr[i/32]相或,因而arr[i/32]的第(i%32)位就为1.
for (int i = 0; i < N; i++)
由于[0, N)已经是从小到大排序好的,那么我们只需判断每个数是否存在,若存在,就输出,所以输出结果也就是排序的了。
#include <stdio.h> #define N 10000000
#define BITSPERWORD 32
#define SHIFT 5
#define MASK 0x1F int arr[1+ N/BITSPERWORD]; voidset(int i)
{
arr[i>>SHIFT] |= (1<<(i&MASK));
} int test(int i)
{
return arr[i>>SHIFT] & (1<<(i&MASK));
} int main()
{
////先在文本文件中生成N个数
//FILE* file = freopen("in", "w", stdout);
//if (file != NULL)
//{
// for (int i = 0; i < N; i++)
// {
// printf("%d\n", N - 1 -i);
// }
// fclose(file);
//} FILE* in_file = freopen("in", "r", stdin);
FILE* out_file = freopen("out", "w", stdout); if (in_file != NULL)
{
int d;
while(scanf("%d", &d) != EOF)
set(d);
fclose(in_file);
} if (out_file != NULL)
{
for (int i =0; i < N; i++)
if (test(i))
printf("%d\n", i);
}
fclose(out_file);
return0;
}
<转载>编程珠玑-位排序(bitsort)的更多相关文章
- 编程珠玑I算法总结
主要是根据编程珠玑后面的Algorithm附录总结了一下这本书里面的经典算法. 1 辗转相减求最大公约数 思想:最大公约数能整除i和j,则其一定也能整除i-j(if i>j) int gcd(i ...
- Programming pearls 编程珠玑的题目
Programming pearls 编程珠玑的题目 这段时间有空都在看编程珠玑,很经典的一本书,一边看一边用 python 做上面的题目,我做的都放到 github 上了 https://githu ...
- 读书笔记--编程珠玑II
学化学的应该都知道chemdraw,这是一款专门绘制化学结构的软件,什么苯环.双键各种word难以搞定的分子式,你可以轻松的用chemdraw完成,可以称得上化学工作者居家旅行必备的良药.其实早在19 ...
- 《编程珠玑(第2版)》【PDF】下载
<编程珠玑(第2版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382225 内容简介 书的内容围绕程序设计人员面对的一系列实 ...
- Select 选择算法 - 编程珠玑(续) 笔记
Select 算法 I 编程珠玑(续)介绍的 Quickselect 算法 选择 N 个元素中的第 K 小(大)值,是日常场景中常见的问题,也是经典的算法问题. 选取 N 个元素的数组的中的第 K 小 ...
- v9 推荐位 排序问题解决办法
原网站:http://bbs.phpcms.cn/thread-879943-1-1.html 简介: 用phpcms做网站的时候,有些地方要用到推荐位列表,如幻灯片,特别推荐等.有时候因为文章的重要 ...
- 《编程珠玑,字字珠玑》读书笔记完结篇——AVL树
写在最前面的 手贱翻开了<珠玑>的最后几章,所以这一篇更多是关于13.14.15章的内容.这篇文章的主要内容是“AVL树”,即平衡树,比红黑树低一个等次.捣乱真惹不起红黑树,情况很复杂:而 ...
- 学习笔记之编程珠玑 Programming Pearls
Programming Pearls (2nd Edition): Jon Bentley: 0785342657883: Amazon.com: Books https://www.amazon.c ...
- “《编程珠玑》(第2版)第2章”:C题(查找变位词,排序)
C题是这样子的: 给定一个英语字典,找出其中的所有变位词集合.例如,“pots”.“stop”和“tops”互为变位词,因为每一个单词都可以通过改变其他单词中字母的顺序来得到. 下段分析摘自该书(P1 ...
随机推荐
- Android开发-API指南-常用Intent
Common Intents 英文原文:http://developer.android.com/guide/components/intents-common.html 采集(更新)日期:2014- ...
- memcached学习(3)memcached的删除机制和发展方向
memcached是缓存,所以数据不会永久保存在服务器上,这是向系统中引入memcached的前提. 本次介绍memcached的数据删除机制,以及memcached的最新发展方向--二进制协议(Bi ...
- jQuery中 wrap() wrapAll() 与 wrapInner()的区别
今晚看书的时候发现jQuery有三个包裹节点的方法,百度了一下jQuery wrap() / wrapAll() / wrapInner(),果然搜索结果 W3School的文档说明是排第一的. 可是 ...
- Swift一些语法
1.函数权限 public : 最大权限, 可以在当前framework和其他framework中访问internal : 默认的权限, 可以在当前framework中随意访问private : 私有 ...
- 【Struts 2】Struts2环境搭建
一.关键步骤 1.创建Java Web项目 2.引入Struts2的依赖包,将依赖包拷贝到WEB-INF/lib下 * commons-logging-1.0.4.jar * freemarker-2 ...
- ssh注解basedao简单的实现
@Repository public class BaseDao extends HibernateDaoSupport{ protected Class objectClass; protected ...
- hdu2072
注意输入全是0的情况. #include <stdio.h> #include <string.h> #include <algorithm> using name ...
- js设计模式(12)---职责链模式
0.前言 老实讲,看设计模式真得很痛苦,一则阅读过的代码太少:二则从来或者从没意识到使用过这些东西.所以我采用了看书(<js设计模式>)和阅读博客(大叔.alloyteam.聂微东)相结合 ...
- oracle 数组类型
create or replace function my_test(p_str varchar2) return number as --普通变量 v_var ); --固定长度数组 type v_ ...
- float:left居中对齐
<div class="M1180"><div class="services"> <div class="serv_c ...