插入排序二分和递归
-
插入排序:n2最重要的排序
- 0-0范围上有序,0-1范围上有序,0-2范围上有序,有序部分在左边,不断向有序部分插入(是通过交换插入的)
- 出现的情况是,数据情况不同会造成数据复杂度的不同
- 选择排序和冒泡排序不管数据状况如何,时间复杂度都不变
- 插入排序当完全有序时,复杂度就变成N,可能会优于选择排序和冒泡排序
-
二分法:
-
有序序列上找一个值
- 不断二分直到 二分的值等于目标值
-
有序序列上找不小于某一个值的最左边的位置
有序序列上找不大于某一个值的最右边的位置
- 特点是不断二分直到区间长度为零
- 若当前二分位置满足,则作为新的右边界,如果不满足,作为新的左边界,最后右边界和左边界只差1,取右边界(大于等于情况下)
-
找局部最小值(不在有序序列上运用)
任何两个相邻的数一定不相等,只要找出一个局部最小值
- 如果两端都不是局部最小值,则中间一定存在局部最小值
- 二分,如果这个点不是局部最小值,那么这个值不满足的那一侧一定存在局部最小值
- 同样是找到符合目标的值即可
- 启发是只要出现丢掉一边也可以的情况就可以使用二分法
-
-
递归:
-
递归的过程可以画出一个调用树,实际的过程就是在这棵树上的后序遍历,需要的最大栈大小就等于最大深度
-
递归行为复杂度估计的master公式
T(N) = a * T(N/b) + O(Nd)
子问题的规模等量,调用a次
-