从1亿个数字中取出最大的100个数字- 位图排序(空间换时间)

位图排序算法通过构建位图数组,以空间换取时间,实现从大量数据中高效找出最大值。该算法首先找到传统数组的最大值,然后将数组元素设置为位图相应位置的值,最后倒序遍历位图输出最大值。在测试中,位图构建耗时最长,但总耗时仍较短,适合快速求解Top100问题。
摘要由CSDN通过智能技术生成

/*
 *一个排序算法题:从1亿个数字中取出最大的100个 

 *装逼宝典:位图公式 bitmap[arr[i]]=1;  将传统数组转换为位图数组就完成了排序!!!
 * 
 *什么是位图?答:构建公式:bitmap[arr[i]]=1; 其中arr是我们的传统数组,bitmap是位图数组。
 *位图长度多少?答:bitmap.length=arr[i].maxValue; 因为位图数组基于传统数组来构建,所以位图数组的长度等于传统数组的最大值+1。
 *例如:现在存在传统数组{1,2,3,5,8}
 * 位图下标:0 1 2 3 4 5 6 7 8 
 * 对应的值:0 1 1 1 0 1 0 0 1 
    位图数组:{0,1,1,1,0,1,0,0,1}

    再次考验 传统数组 {2,4,3,1,9999999} 对应位图数组 
         0 1 1 1 1 0 0 0 0 0 0 0 0 .....1

     1个int=4Byte   1亿个数字int = 4亿B/1024/1024=370MB

 * 
 * 为什么使用位图?答:直接从1亿数据里面找Top100效率很低,通过构建位图,然后倒序输出位图就可以快速找到Top100.或者TopN
 * 
 * 需要耗费多少时间?答:构建位图+倒序输出   = 累计耗时
 * 
 * 从下面的测试结果我们可以看到,最耗时的是位图的构建过程.
 * 1.找最大值:14ms
 * 2.构建位图:149ms
 * 3.倒序输出:84ms
 * 4.累计耗时:234ms
 * 
 * 总结:
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值