位排序
来源:互联网 发布:安卓变声软件 编辑:程序博客网 时间:2024/06/08 01:17
看到一个高效的排序算法,叫做位排序。首先了解一下,将一组数据变成位存储结构,如下面一段0,1串:
01010000101011101
表示集合{1,3,8,10,12,13,14,16},当然数据是从零开始的,此算法只是对不重复的正整数进行排序的。
有必要介绍如下两种操作:
i>>SHIFT,i/32得出字节数(因为是int型);
i & MASK , i mod MASK。
代码如下:
#include <stdio.h>#define SHIFT 5#define MASK 0x1f#define n 100000000#define bits 32int a[1+n/bits];//将第i位数据设为1;void set(int i) {a[i>>SHIFT] |= (1<<(i & MASK));}//将各位的数据置为0;void clr(int i) {a[i>>SHIFT] &= ~(1<<(i & MASK));}//取第i位;int test(int i) {return (a[i>>SHIFT] & (1<<(i & MASK)));}int main(){int i;for(i=0;i<n;i++)clr(i);//输入数据,输到0结束;while(scanf("%d",&i)!=EOF && i!=0)set(i);for(i=0;i<n;i++){if(test(i)) //若第i位是1,则输出;printf("%d\n",i);}printf("Hello, world\n");return 0;}
0 0
- 位排序
- 位排序
- 位排序
- 位排序
- 位排序
- 位向量和排序
- 位向量和排序
- 位向量和排序
- 计数排序+位运算
- 位向量排序
- uva6469禁位排序
- 二位数组排序
- 位排序-java版
- 位向量法排序
- 位排序学习笔记
- 二位数组排序
- java多位排序
- 奇偶位排序
- 贪心算法思想
- Java中字节流和字符流之间的转换
- window.onunload, window.onbeforunload
- Hibernate 4.3.x 注解常见错误及解决方案
- Java序列化
- 位排序
- 学习opencv 习题答案-第三章
- Android EditText插入表情(字符串)到光标位置
- ubuntu14.04 配置 genymotion下载virtual device出现 Http error response: Unknown error
- php和apache的整合
- 004_Fragment 翻译学习
- Associations marked as mappedBy must not define database mappings like @JoinTable or @JoinColumn
- ConcurrentHashMap的一点理解
- java线程之间共享静态变量的,输出打印结果有问题