`
yuan_xulong
  • 浏览: 87887 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用位图实现整数排序

 
阅读更多

    命题:一个顺序输入文件(比如磁带机),无序保存了一些整型值,这些值最小从1开始,最大不超过10000000,且没有重复,要求对文件中的数值进行排序,并按升序输出.

    约束:可以使用的内存很小,最大不超过2M内存.

    算法实现:可以使用位图来实现该排序,具体描述,假设有5个数字集合{1,2,3,5,8},可以用10位位图表示为{1,1,1,0,1,0,0,1,0,0},位图的长度描述了最大可以保存的值,位图的值表示对应于该位置的值是否存在,1表示存在该值,0表示集合不存在该值,对于以上例子来说,10位的位图可以表示的最大数字为10,也就是最后位置的值为1,比如,要表示{3,5,10},位图的值为{0,0,1,0,1,0,0,0,0,1}即可.

    有了以上基础,对于命题即可解决,因为最大数不超过1000000,因此我们需要定义一个一百万的位图,具体需要的内存为:1000000/1024/1024 <=1M,然后读入顺序文件,对于每一个数值,把相应位置的值置为1即可,然后遍历该位图,如果值为1即输出该值,即可实现排序.伪代码如下(不会写伪代码,希望大家能看懂):

for(i = 1 to 1000000)

  bitmap(i = 0)

endfor 

for(digit in file)

  bitmap[digit] = 1

endfor

for(i = 1 to 1000000)

  if(bitmap[i] == 1)

    output(i)

  endif

endfor

 

分享到:
评论

相关推荐

    PHP实现bitmap位图排序与求交集的方法

    本文实例讲述了PHP实现bitmap位图排序求交集的方法。分享给大家供大家参考,具体如下: 初始化一串全为0的二进制; 现有一串无序的整数数组; 如果整数x在这个整数数组当中,就将二进制串的第x位置为1; 然后顺序读取这...

    C++实现位图排序实例

    在《编程珠玑》一书里提到了一种算法导论里没有提到过的位图排序方法,这种排序方法是通过牺牲空间效率来追求时间效率(线性时间)以达到时间-空间折中与双赢的目的。本文以实例形式简单讲一下位图排序思想。 一、...

    海量数据去重排序bitmap(位图法)在java中实现的两种方法

    今天小编就为大家分享一篇关于海量数据去重排序bitmap(位图法)在java中实现的两种方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    delphi 开发经验技巧宝典源码

    0119 使用IntToStr函数将整数转换为字符串类型 80 0120 使用StrToInt函数将字符串转换成整数 81 0121 使用StrToBool函数将字符串转换为布尔类型 81 4.6 对话框函数 81 0122 使用InputBox函数显示输入对话框...

    delphi 开发经验技巧宝典源码06

    0119 使用IntToStr函数将整数转换为字符串类型 80 0120 使用StrToInt函数将字符串转换成整数 81 0121 使用StrToBool函数将字符串转换为布尔类型 81 4.6 对话框函数 81 0122 使用InputBox函数显示输入对话框...

    C语言学习实例220例

    013 用二维数组实现矩阵转置 014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳...

    200个经典C程序源码小游戏

    013 用二维数组实现矩阵转置 014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 ...

    C#开发实例大全(基础卷).软件开发技术联盟(带详细书签) PDF 下载

    实例101 使用快速排序法对一维数组进行排序 119 实例102 使用直接插入法对一维数组进行排序 121 实例103 使用希尔排序法对一维数组进行排序 122 实例104 使用Sort方法对数组进行快速排序 124 实例105 反转数组中元素...

    C源代码实例集

    001 第一个C程序 002 运行多个源文件 003 求整数之积 004 ...用二维数组实现矩阵转置 014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 ...

    200个经典C程序【源码】

    013 用二维数组实现矩阵转置 014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割...

    java笔试题算法-big-data-made-easy:大数据变得容易

    地图用展开树实现。 - 可有效更新的双数组 trie 的 C++ 实现。 - 使用 O(1) 内存的快速且稳定的排序算法。 公共区域 。 - C++/Python 中的近似最近邻优化内存使用和加载/保存到磁盘。 - 一个带有简洁存储的 ngram ...

    220个C语言程序源代码集合.zip

    013 用二维数组实现矩阵转置 014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割...

    C语言经典源代码实例 数据结构 操作系统 图形等

    013 用二维数组实现矩阵转置 014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割...

    C语言源代码实例.rar

    013 用二维数组实现矩阵转置 014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割...

    经典的C程序220案列

    013 用二维数组实现矩阵转置 014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割...

    关于C的精粹包含至少200个C语言小程序

    013 用二维数组实现矩阵转置 014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割...

Global site tag (gtag.js) - Google Analytics