算法超全总结
七种查找
-
基本查找
-
二分查找
-
插值查找
-
分块查找
-
斐波那契查找
-
哈希查找
-
树表查找
基本查找:从0索引开始挨个往后找,也叫顺序查找
二分查找/折半查找:可以提高查找效率
前提条件:数组中的数据必须是有序的
核心逻辑:每次排除一半的范围
-
min和max表示当前要查找的范围
-
mid是在min和max中间的
-
如果要查找的元素在mid左边,缩小范围时,min不变,max等于mid-1
-
如果要查找的元素在mid右边,缩小范围时,max不变,min等于mid+1
二分查找改进/插值查找
mid=min+((key-arr[min])/(arr[max]-arr[min]))*(max-min)
key-要查找的值
数组中的值分布比较均匀才适合用
斐波那契查找 1:0.618
mid=min+黄金分割点左边长度-1
排序算法
1.冒泡算法 :相邻的数据两两比较,小的放前面,大的放后面
2.选择排序:从0索引的元素跟后面的元素依次比较,小的放前面,大的放后面,以此类推
3.插入排序:将0索引的元素到N索引的元素看作是有序的,把N+1索引的元素到最后一个当成无序的,遍历无序的数据,将遍历到的元素插入有序序列中适当的位置,如遇到相同数据,插到后面,
N的范围:0-最大索引
递归算法
把一个复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解
递归:方法中调用方法本身的现象 注意递归一定要有出口,否则会内存溢出
递归策略只需少量的程序就可以描述出解题过程所需的多次重复计算
书写递归的两个核心
-
找出口:什么时候不再调用方法
-
找规则:如何把大问题变成规模较小的问题
快速排序
-
将排序范围中的第一个数字作为基准数,再定义两个变量start,end
-
start从前往后找比基准数大的,end从后往前找比基准数小的
-
找到之后交换start和end指向的元素,并循环这一过程,直到start和end处于同一个位置,该位置是基准数组中应存入的位置,再让基准数归位
-
归位后的效果:基准数左边的比基准数小,右边的比基准数大