博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
位图排序
阅读量:5788 次
发布时间:2019-06-18

本文共 1276 字,大约阅读时间需要 4 分钟。

1.在编程珠玑中如果一个待排序的数组有这样三个属性:输入数据限制在相对较小的范围内;数据没有重复;而且对于每条记录而言,除了单一整数外,没有任何其他关联数据。就可以用位图来排序。

在32的系统下用unsigned int a[]的数组来表示位图,那么a[0]就可以表示0-31这32个整数了,如果在待排序的数组中出现了这几个数,就把相应的位置1,。

void bit_set(unsigned int i){        a[i / 32] |= 1 << (i & 0x1f);}

 

其中0x1f代表最多只能移31位。i / 32表示这个落在那个区间内。

bool bit_get(unsigned int i){        return (a[i / 32] & (1 << (i & 0x1f)));}

看相应的位是否置1.

#include
#include
unsigned int bit[10000] = {
0};void bit_set(unsigned int i){ bit[i / 32] |= 1 << (i & 0x1f);}bool bit_get(unsigned int i){ return (bit[i / 32] & (1 << (i & 0x1f)));}int main(void){ int i; FILE *fp_unsort_file = fopen("data.txt", "r"); if (fp_unsort_file == NULL) { fprintf(stderr, "error of fopen\n"); exit(0); } int num; while (fscanf(fp_unsort_file, "%d", &num) != EOF) { if (num < 32 * 10000) bit_set(num); } FILE *fp_sort_file = fopen("sort.txt", "w"); for (i = 0; i < 32 * 10000; i++) { if (bit_get(i)) fprintf(fp_sort_file, "%d\n", i); } fclose(fp_sort_file); fclose(fp_unsort_file); return 0;}

转载于:https://www.cnblogs.com/lutianba/p/3358288.html

你可能感兴趣的文章
ReactiveSwift源码解析(三) Signal代码的基本实现
查看>>
MVC模式利用xib文件定制collectionCell
查看>>
(六)Oracle学习笔记—— 约束
查看>>
【SQL】查询数据库中某个字段有重复值出现的信息
查看>>
mysql 行转列 列转行
查看>>
[Oracle]如何在Oracle中设置Event
查看>>
top.location.href和localtion.href有什么不同
查看>>
02-创建hibernate工程
查看>>
Open Graph Protocol(开放内容协议)
查看>>
模块化(1):基本思路
查看>>
Ubuntu18.04中配置QT5.11开发环境
查看>>
Exception的妙用
查看>>
基于浏览器的开源“管理+开发”工具,Pivotal MySQL*Web正式上线!
查看>>
JavaScript(五):变量的作用域
查看>>
知识图谱在互联网金融中的应用
查看>>
MySQL 到底能不能放到 Docker 里跑?
查看>>
wpf 自定义窗口,最大化时覆盖任务栏解决方案
查看>>
【docker】关于docker 中 镜像、容器的关系理解
查看>>
information_schema系列五(表,触发器,视图,存储过程和函数)
查看>>
瓜子二手车的谎言!
查看>>