二分查找要求对象必须有序,其基本原理如下:
- .从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;
- 2.如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。
- 3.如果在某一步骤数组为空,则代表找不到。
二分查找也成为折半查找,算法每一次比较都使搜索范围缩小一半, 其时间复杂度为 O(logn)。
未使用递归:
1 a = [1,5,-9,2,8] 2 3 low = 0 4 high = len(a)-1 5 def mid_sort(array,value): #value 要找的值 6 7 while(low < high): 8 mid = (low+high)/2 9 10 if array[mid] < value : 11 low = mid+1 12 elif array[mid] > value: 13 high = mid-1 14 else: 15 return mid 16 17 return None
使用递归:
1 def binary_search(array,value,low,high): 2 if low>high: 3 return None 4 mid = (low + high)/2 5 if array[mid] > value: 6 return binary_search(array,value,low,mid-1) 7 elif array[mid] < value: 8 return binary_search(array,value,mid+1,high) 9 else: 10 return mid
性能;
非递归比递归 效率高