常见的算法

一、种类及特点

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索引的数字作为基准数,确保基准数在数组中正确的位置

归位后的效果:比基准小的全部在左边,比基准数大的全部在右边

特点:效率很高

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值