Top n排序算法

本文探讨了在数据结构和排序算法中,如何选择在寻找前N最大值时效率较高的算法。通过比较交换排序、选择排序、插入排序及快速排序,发现堆排序由于其平均时间复杂度和空间复杂度的优势,成为解决TopN问题的理想选择。作者还强调了编码复杂度在精炼代码中的重要性。
摘要由CSDN通过智能技术生成

数据结构中, 常用的算法有,交换排序(冒泡排序)、选择排序和插入排序,还有相应改进算法快速排序、堆排序和希尔排序

简单的排序(交换排序、选择排序和插入排序),平均时间复杂度都是O(n^2) 即n平方,每一趟排序平均要查询n个元素。它们改进后的算法,快速排序、堆排序平均时间复杂度都是

 希尔排序平均时间复杂度是:

 这些算法的排序研究都是基于将所有元素都排序好的。但Top n只需要选出前几名最大或最小值。  那我们就在以上几种算法中,选择每趟都可以找到一个当前最大值的排序算法就好。以上算法都有两层循环,top n求解时,外层循环只需要运行指定次数, 如100个分数排名,找出前10名的, 则我们只需要要外循环运行10次。内循环,一般算法是运行n次,改进的算法是运行

 。

从以上分析,可以选出:

交换排序(冒泡排序)、选择排序,堆排序。

那快速排序可不可以呢?  那是不可以的。因为快速排序一趟下来,能确定的是轴元素的最终位置,但轴元素却不是当前排序元素的最值元素。

所以以上列出的最高效的top n算法,就是堆排序了。它的空间复杂度是O(1)。

留个小问题,除了时间复杂度,空间复杂度外,关于编写代码多少的编码复杂度,小伙伴们有了解吗?

这可以关系到你写的代码精不精炼的评判标准。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值