对于排序算法而言,有几个重要的点:
- 理解此种排序算法是怎么运行的
- 理解算法的时间复杂度与空间复杂度计算
递推公式(关乎时间复杂度的计算)
递推公式主要为以下的形式(递归使用的复杂度也这么算):
具体推导:
https://jeffe.cs.illinois.edu/teaching/algorithms/notes/99-recurrences.pdfjeffe.cs.illinois.edu https://www.cs.ucdavis.edu/~gusfield/cs222f07/mastermethod.pdfwww.cs.ucdavis.edu公式1的递推公式复杂度计算:


如何推导的三种方法
- Substitution Method

2. 递归树(大体思路是使用树的思想来计算时间复杂度,将每一层的复杂度算出来,然后将所有层的时间复杂度相加)

3. Master Method(万能方法,可以直接得到递归方程的解,但是只有以下形式可以利用)

Merge sort:(
Binary Search:(
如果还有不清楚的,可以做一下以下的练习
https://www.csd.uwo.ca/~mmorenom//CS424/Ressources/master.pdfwww.csd.uwo.ca插入排序()
按照顺序温习了一下算法,用Python实现的,格式是按照leetcode写的。
十大经典排序算法动画与解析,看我就够了!(配代码完全版)-五分钟学算法www.cxyxiaowu.com

个人感觉动画没办法看清楚算法的演变过程,所以是 动画+示意图
冒泡排序



class
冒泡排序优化
选择排序

class
插入排序
Python 插入排序 | 菜鸟教程www.runoob.com
class
归并排序
归并排序
堆排序
list = [1, 8, 2, 23, 7, -4, 18, 23, 42, 37, 2]

largest
heapify使用了一个递归方程,主要保证了最大(小)堆一定是满足条件1,2,3的,用递归主要是为了便利所有的节点。
heapsort最奇怪的是for循环是从n-->1,这个算法是一个o(n)的算法,如果是从根节点向下取寻找最大值的话,那么如果最大值在最后的叶子节点,就算找到了最大值,也无法通过交换到根节点,如果是从叶子节点开始便利那么每一个节点的最大值,就会通过二叉树交换到根节点。
heapsort使用已经建立好的max heap,每次取第一个数字,放到List最后面。然后重新heapfiy
# Python program for implementation of heap Sort
疑问1:heapify为什么是o(nlogn)的算法
疑问2:heapify为什么是不稳定的算法
疑问3:heapify
计数排序
桶排序
基数排序