赞
踩
Example:
在顺序表 [10,20,30,40,50,60,70]
中,用二分法查找关键码60。
数值 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 |
---|---|---|---|---|---|---|---|---|
下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
以上8个数,从0到7编码,查找过程如下:
第一轮
mid =(left + right)/ 2 = (0 + 7) / 2 = 3 ,「向下取整」
-> 目标值60与下标为3的值40进行比较,40<60,则 left = mid + 1 = 4;
第二轮
mid = (left + right)/ 2 = (4+7) /2 = 5,「向下取整」
-> 目标值60与下标为5的60比较,60=60,返回下标5,算法结束。
共比较了2次。
mid=(left + right)/ 2
向下取整;left = mid + 1
(right = mid - 1
);最小比较次数为1,例如[1,2,3]
二分查找2。
最大比较次数为log2(n) + 1
向下取整,
对有序表,根据二分查找法定义,每次比较之后问题规模都会减小一半,所以2^k=N
,解得k=log2(n)
。又因为最后只剩一个元素时,也要执行查找过程,所以+1。
def BinarySearch(arr, key):
left = 0
right = len(arr)-1
while left <= right:
mid = (left + right)//2
if key == arr[mid]:
return mid
elif (key < arr[mid]):
right = mid - 1
else:
left = mid + 1
在无序的数组中查找一指定值,必须遍历整个数组,直至查找成功。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。