写在前面,正如标题所说,这里是算法学习笔记(python3版),主要是代码实现和算法应用。
问题描述
给定一个有序的 data, 判断要查找的 target 是否在 data 中。
![c0b6f44e3cb935169295be2d635cb557.png](https://img-blog.csdnimg.cn/img_convert/c0b6f44e3cb935169295be2d635cb557.png)
线性查找
思想是通过遍历data,一个一个的去比较 data[i] 和 target 是否相同。
![27fc3c859c50b85607865726078db6d5.gif](https://img-blog.csdnimg.cn/img_convert/27fc3c859c50b85607865726078db6d5.gif)
- 优点:实现简单。
- 缺点:假如要查找的数据在列表最尾端,需要从头到尾遍历data。
![8232f566a4d04f4e55791ba114e77edc.png](https://img-blog.csdnimg.cn/img_convert/8232f566a4d04f4e55791ba114e77edc.png)
二分查找(迭代实现)
思想是由于给定的data是有序的,所以我们可以先从中间开始比较。
![9c92f22cc0ae88a34557248952567e91.png](https://img-blog.csdnimg.cn/img_convert/9c92f22cc0ae88a34557248952567e91.png)
- 如果中间的值比target大,那么下次我们用中间值左侧的中间值和target比较。
- 如果中间的值比target小,那么下次我们用中间值右侧的中间值和target比较
![b09f982b276a8d4d19c291b53bf9dc45.png](https://img-blog.csdnimg.cn/img_convert/b09f982b276a8d4d19c291b53bf9dc45.png)
二分查找(递归实现)
思想和前面的迭代方式一样,只是这里使用递归的方式来实现。
- 递归思想是函数自身调用自身,把大规模的问题不断变小。
- 代码实现和前面的迭代方式相比,主要是去掉了while循环。
![4a838964aa77327f1c54c6329843ea6c.png](https://img-blog.csdnimg.cn/img_convert/4a838964aa77327f1c54c6329843ea6c.png)
写在后面,就这么多了,如果发现有问题,欢迎在评论区留言。