一些海量数据排序算法问题总结

1.给2000千万高考学生排序,要求要能根据分数找到该学生的排名?

千万别被2000千万这个数字唬住,理性的看一下题,“高考”这个词不知道你注意到了没?这是一个隐藏条件。你高考考了多少分?

总分多少?可能有的小伙伴已经反应过来了。高考700分,那我们开一个700大小的数组,记录每个分数的的个数就可以了。

对,就是使用桶排序的算法,来进行排。

这一类题他虽然样子很吓人,但是仔细 发现他的范围很小,就抓住他这个范围小来做文章。

时间复杂度:n  空间复杂度也是700

 

2.给2亿个不重复的正整数进行排序(范围0-2亿)?

一个数比一个数夸张,刚才我们使用的桶排序,现在数的范围是很大的,所以我们应该想怎么把他存储起来,既能节省空间还快,主要是你怎么来存储,2亿个int类型,一个int4bit,也就是需要8亿bit(8亿bit大概等于800M,内存恐怕吃不消)。

此时有一个“不重复”这三个字就特别扎眼,我们怎么利用这个特性呢?

我们居然不能用一个int去装,那我们就可以用一位去装,int  = 4bit = 32位。

那么用的空间就是:2亿/32 (大概是25M)这下内存轻轻松松。

25M大概需要600万长度的数组。

做法详情x为待排序数字。 x/32找到数组下标。x%32找到它对应的位,然后把该位置为1。

这样就用奇技淫巧给解决掉了。

 

3.给你一个超大的文件,

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值