欢迎光临散文网 会员登陆 & 注册

二分查找法

2022-05-12 16:10 作者:学途压力大  | 我要投稿

二分查找法是非常经典的一种查找法,每个程序员都应该理解并熟练掌握。

1. 算法使用前提:数组是有序数组,且无重复元素

2. 基本原理:

首先将要查找的元素(key)与数组的中间元素比较

1、如果key小于中间元素,只需要在数组的前一半元素中继续查找

2、如果key和中间元素相等,匹配成功,查找结束

3、如果key大于中间元素,只需要在数组的后一半元素中继续查找

3. 复杂度:时间复杂度O(logn);循环实现空间复杂度为O(1)

运行速度O(1)<O(logn)<O(n)<O(nlogn)<O(n²)<O(n³)<O(2ⁿ)<O(n!)

4. 过程图示:

假如我们使用二分查找法找5

1、首先定义头尾指针,算出中间指针。本文中间数算法是向下取整mid=(start+end)/2|0。位运算|0作用是向下取整。

所有的按位操作符的操作数都会被转成补码形式的有符号32位整数。也就是如果有小数则忽略。而0 转为二进制则为 000000......(32位) 。然后一一比较,还是原来上面的值。所以只是为了取整。


2、5比中间数10小。将high指针移动到mid左边(同理,如果大于就将low移动到mid右边)。然后计算出新的mid位置

此时key和中间元素相等,匹配成功,查找结束。

如果我们找的是2,2比mid还小,我们需要将high继续移动到mid左边

此时,再计算mid 为 0+0/2 还是 0 将 mid移动到下标为0的位置。然后进行判断,然后找到2。

算法实现:

参考于:

https://www.bilibili.com/video/BV1LJ411X76n

https://blog.csdn.net/m0_66769266/article/details/124212178

https://network.51cto.com/article/688182.html

https://www.csdn.net/tags/MtTaMg4sOTgxNDk5LWJsb2cO0O0O.html

https://blog.51cto.com/u_15246373/3062445

https://blog.csdn.net/weixin_41489378/article/details/119701190

二分查找法的评论 (共 条)

分享到微博请遵守国家法律