位排序
来源:互联网 发布:linux获得root权限 编辑:程序博客网 时间:2024/05/22 10:22
位排序,顾名思义,就是利用另外的内存空间来存放要排序的数据,其中的为就是每个数的大小所对应的位置。我们知道一个字节是8位,如果用来表示数的话,可以表示8个数,但数的大小只能在0-7之间。这一点和基数排序有些共同点。数值越大越占用空间,且源数据不能有重复。
源程序如下:
#include <stdio.h>#include <malloc/malloc.h>#define BYTESIZE 8#define MASK 0x7#define SHIFT 3//将pos的对应位置1,注意是将第pos位置1void SetBit(char *p, int pos){ //pos>>SHIFT == pos/8 //pos&MASK == pos%8 //再将该位置1 p[pos>>SHIFT] |= (0x01<<(pos&MASK));}void BitMapSort(){ int num[] = {3,9,2,10,6,11,8,14,7}; //BufferLen这个值是根据待排序的数据中最大值确定的 //待排序中的最大值是14,因此只需要2个字节 const int BufferLen = 2; char *pBuffer = (char*)malloc(sizeof(char)*BufferLen); //要将所有的Bit位置为0,否则结果不可预知。 memset(pBuffer,0,BufferLen); for(int i = 0; i < 9;i++) { //首先将相应Bit位上置为1 SetBit(pBuffer,num[i]); } //输出排序结果 for(int i = 0;i<BufferLen;i++)//每次处理一个字节(Byte) { for(int j = 0;j<BYTESIZE;j++)//处理该字节中的每个Bit位 { //判断该位上是否是1,进行输出 //首先得到该第j位的掩码(0x01<<j),将内存区中的 //位和此掩码作与操作。最后判断掩码是否和处理后的 //结果相同 if((*pBuffer&(0x01 << j)) == (0x01 <<j)) { printf("%d ",i*BYTESIZE + j); } } pBuffer++; }}int main(){ BitMapSort(); return 0;}参考了网上的一位大神程序,向他致敬
0 0
- 位排序
- 位排序
- 位排序
- 位排序
- 位排序
- 位向量和排序
- 位向量和排序
- 位向量和排序
- 计数排序+位运算
- 位向量排序
- uva6469禁位排序
- 二位数组排序
- 位排序-java版
- 位向量法排序
- 位排序学习笔记
- 二位数组排序
- java多位排序
- 奇偶位排序
- position属性absolute与relative 详解
- 基于ContentObserver来动态取消或添加屏幕超时任务
- wxpython 颜色对话框 ColourDialog
- 共线点Max Points on a Line
- C#中 MouseLeftButtonDown MouseLeftButtonUp MouseMove 使用
- 位排序
- 二天个人提供乳房和天赋规划图
- 最近需要看的几本书
- [资源推荐] 开源工具链博客
- LeetCode --- Binary Tree Preorder Traversal
- UVA - 10603 Fill(bfs+优先队列+动态规划)
- 黑马程序员—(iOS开发)C语言简单编程---(二)
- 二条特让他让他一人一天有图有
- 不重复随机数列生成算法