二分法查找
步骤:(设置查找的序列为L=[1,2,3,5,10,20,30],要查找的数字是20)
- 确定该期间的中间位置K,设最低位索引为low,最高位high
- 将查找的值T与array[k]比较。若相等,查找成功返回此位置;否则确定新的查找区域,继续二分查找。区域确定如下:
1)array[k]>T 由数组的有序性可知array[k,k+1,……,high]>T;故新的区间为array[low,……,K-1]
2)array[k]<T 类似上面查找区间为array[k+1,……,high]。每一次查找与中间值比较,可以确定是否查找成功,不成功当前查找区间缩小一半。递归找,即可
python代码如下:
1 # -*- coding: utf-8 -*- 2 """ 3 ------------------------------------------------- 4 File Name: 1 5 Description : 6 Author : dcl 7 date: 2018/1/31 8 ------------------------------------------------- 9 Change Activity: 10 2018/1/31: 11 ------------------------------------------------- 12 """ 13 14 15 def binarySearch(nums , key): 16 low = 0 17 high = len(nums) - 1 18 19 while low < high: 20 mid = (high + low) / 2 21 if nums[mid] < key: 22 low = mid + 1 23 elif nums[mid] > key: 24 high = mid - 1 25 else: 26 return [mid,nums[mid]] 27 28 if __name__ == "__main__": 29 print binarySearch([1,2,3,4,33,44,45,65],45)