面试题 M大小的数组中选出前N个元素

本文探讨了在数组中寻找前n个最大元素的有效算法。介绍了几种常见的解决方案,包括快速排序、冒泡排序等,并详细阐述了一种改进的快速排序算法实现方法,该算法通过递归地分割数组来减少不必要的比较。

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

已知一个大小为M的数组  里面放着M个整数

现在要找出前n个最大的元素

问:

  最优的算法,时间复杂度和空间复杂度

 

 

解法有很多,最好的不好找, 这里随便先举几个一般的:

  1.先给M的数组做一次排序 那么前n个元素就是结果, 假设用快速排序 那么时间复杂度就是 M*logM

  2.已知使用冒泡法找出最大的一个元素, 需要M次, 那么找出N个,就需要M*N ,如果N很小这个算法就很优化

补充

以下是个人觉得最好的算法(快速排序的一部分)

随机在m中挑选一个值,  然后比m小的放在m左边, 比m大的放在m右边

假设右边有c个元素, 如果c小于5个, 在左边的元素中继续寻找 最大的n-c个元素, 

否则丢弃所有左侧元素, 在右侧中继续寻找最大的n个元素

递归,不断丢弃元素 直到最后找到所有的前n大元素

转载于:https://www.cnblogs.com/PurpleTide/archive/2011/01/01/1923717.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值