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

本文总结了处理海量数据排序的几种方法,包括利用桶排序解决2000千万高考学生排序问题,通过位运算优化2亿不重复正整数排序,使用最大堆排序和归并算法找出超大文件中出现频率最高的5个元素,以及针对一亿int、short类型数字的快速排序。每种方法都注重空间和时间复杂度的优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.给你一个超大的文件,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值