《算法导论》公开课--排序算法笔记

本文介绍了排序算法的两大类——基于比较的排序与非基于比较的排序,并详细分析了它们的时间复杂度。基于比较的排序包括插入排序、选择排序、归并排序等;非基于比较的排序则有计数排序、桶排序、基数排序。文章还探讨了算法的稳定性及快速排序的不同实现方式。

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

1. 目前的排序算法大体分为两类:基于比较的排序、非基于比较的排序。

   在基于比较的排序模型中,只允许对2个数进行比较操作来完成排序,其运行效率最快只能为O(nlgn),这一点可以通过构建决策树来进行证明。

   大体证明思路如下:对于n个数,有 n! 种排列情况,每一种排列情况对应决策树的某个叶节点,假设该决策树的高度为 h ,则树的叶节点最多为 2^h 个(决策树属于二叉树),所以有 n! <= 2^h  => lg(n!)<=h,根据斯特林公式:n! >= (n/e)^n,最终可以得到:h >= n*(lgn-lge),即 h >= O(nlgn)。在最坏情况下,排好序的情况对应了决策树中最高的那个叶节点,其运行的时间成本就对应了从根节点到该最高叶节点路径上的所有节点个数,即决策树的高度。所以在最坏情况下,基于比较的排序算法运行效率最快只能是O(nlgn)!

2. 基于比较的排序算法,主要有:插入排序、选择排序、归并排序、快速排序、堆排序。最坏情况下,插入排序、选择排序、快速排序的时间复杂度为O(n^2),归并排序、堆排序的时间复杂度为O(nlgn)。非基于比较的排序算法主要有计数排序、桶排序、基数排序,最坏情况下这些算法的时间复杂度都是O(n),而且都是稳定性算法,但是需要额外的空间来完成排序。

3. 算法的稳定性。对于原数组中两个等值数字的相对位置,在排序过程中始终不会有变化,则该排序算法为稳定性算法。

4. 快速排序的运行效率跟主元的选取有很大关系,普通快速排序选取特定位置的数字当做主元(一般为第一个数字),这样在数组已经有序的情况下,每次划分将得到最坏的结果,时间复杂度T(n)=O(n^2)。而随机化快速排序则随机选取某个位置上的数字当做主元,这样虽然最坏情况仍然是O(n^2),但最坏情况不再受限于输入数据的排序程度,而是取决于主元选取的随机化。实际上,随机化快速排序得到理论最坏情况的可能性仅为1/(2^n)。所以随机化快速排序可以对于绝大多数输入数据达到O(nlogn)的期望时间复杂度。

5. 基数排序的核心思想是从低到高按位进行多轮排序,每轮排序采用比较简单的线性时间排序算法(如计数算法)。基数排序是用来在线性时间内处理大范围数据的算法,运行效率为O(dn),其中d为数组中最大数的位数。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值