一、种类及特点
1、基本查找(顺序查找)
数据没有任何顺序
2、二分查找
(1)数组中数组必须是有序的,每次排除一半的查找范围
(2)二分查找的优势:提高查找效率
(3)二分查找的前提条件
数据必须是有序的,如果数据是乱的,先排序后再用二分查找得到的索引没有实际意义,只能确定当前数字在数组中是否存在,因为排序之后数字的位置就可能就发生变化了
(4)二分查找的过程
(1)min和max表示当前要查找的范围
(2)mid是在min和max之间的
(3)如果要查找的元素在mid的左边,缩小范围时,min不变,max-1
如果要查找的元素在min右边,缩小范围时,max不变,min等于mid+1
(5)二分查找改进
插值查找,数组中数字分布比较均匀,使mid尽可能的靠近要查找的数据
3、斐波那契查找
根据黄金分割点来计算mid指向的位置
4、分块查找
原则一:前一块中的最大数据,小于后一块中的所有数据(块内无序,块间有序)
原则二:块数数量一般等于数字的个数开根号,比如:16个数字一般分为4块左右
核心思路:先确定要查找的元素在哪一块,然后在块内挨个查找
5、插值查找
6、数表查找
7、哈希查找
二、排序算法
1、冒泡排序
相邻的数据两两比较,小的放前面,大的放后面
(1)第一轮循环结束,最大值已经找到了,在数组的最右边
(2)第二轮循环只要在剩余的元素找到最大值就可以了
(3)第二轮循环结束,次大值已经确定,第三轮循环继续在剩余的数据中循环
(4)当数组中有n个数据,总共我们只要执行n-1轮的代码就可以了
这样的代码会出现很多冗余和重复的代码,改进策略是:改成循环的嵌套
2、选择排序
从0索引开始,拿着每一个索引上的元素跟后面的元素依次比较,小的放前面,大的放后面
(1)第一轮结束后,最小的数据已确定
(2)第二轮循环从1索引开始以此类推
改进:循环的嵌套
3、插入排序
将0索引的元素到N索引的元素看作是有序的,把N+1索引的元素到最后一个当成无序的,遍历无序的数据(从后往前去遍历),将遍历到的数据插入到有序序列中合适的位置,如遇相同的数据,插在后面
N的范围:0~最大索引
4、快速排序
(1)递归
递归指的是方法中调用方法本身的现象(递归一定要有出口,否则就会出现内存溢出)
递归算法的作用:把一个复杂的问题层层转换为一个与原问题相似的规模较小的问题求解
递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算
书写递归的两个核心:找出口:什么时候不再调用方法
找规则: 如何把大问题变成规模小的问题
心得:方法内部再次调用方法的时候,参数必须更加的靠近出口
(2)快速排序
第一轮:把0索引的数字作为基准数,确保基准数在数组中正确的位置
归位后的效果:比基准小的全部在左边,比基准数大的全部在右边
特点:效率很高

被折叠的 条评论
为什么被折叠?



