排序目录
复杂度总结
-
时间复杂度
1)平均情况下,快速排序、希尔排序(复杂度了解即可)、归并排序和堆排序的时间复杂度均为O(nlog2n),其他都是O(n2)。一个特殊的是基数排序,其时间复杂度为O(d(n+rd))
2)最坏情况下,快速排序的时间复杂度为O(n2),其他都和平均情况下相同。
故事助记:如军训时,教官说:“ 快些以 nlog2n 的速度归队。” 其中,“快” 指快速排序,“些” 指希尔排序(发音近似),“归” 指归并排序,“队” 指堆排序(谐音),这 4 种排序的平均时间复杂度都是O(nlog2n) -
空间复杂度
记住几个特殊的就好,快速排序为O(log2n),归并排序为O(n),基数排序为O(rd),其他都是O(1) -
其他
直接插容易插变成O(n),起泡起得好变成O(n),所谓 “容易插” 或 “起得好” 都是指初始序列已经有序
算法稳定性总结
一句话记忆:“考研复习痛苦啊,情绪不稳定,快些选一堆好友来聊天吧”
这里,“快” 指快速排序,“些” 指希尔排序,“选” 指简单选择排序,“堆” 指堆排序,这4种是不稳定的,其他自然都是稳定的
其他细节(与排序原理有关)
- 经过一趟排序,能够保证一个关键字到达最终位置,这样的排序是交换类的那两种(起泡、快速)和选择类的那两种(简单选择、堆)
- 排序算法的关键字比较次数和原始序列无关——简单选择排序和折半插入排序
- 排序算法的排序趟数和原始序列有关——交换类的排序。
再次比较一下直接插入排序和折半插入排序
二者最大的区别在于查找插入位置的方式不同。直接插入按顺序查找的方式,而折半插入按折半查找的方式。这里将排序和查找两章的内容结合,大家在复习时也应该融会贯通,计算机的知识都是相通的
一个有用的结论
借助于“比较”进行排序的算法,在最坏情况下的时间复杂度至少为O(nlog2n)