python 二分查找

二分查找要求对象必须有序,其基本原理如下:

  • .从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;
  • 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

性能;

非递归比递归 效率高

原文地址:https://www.cnblogs.com/shunyu/p/8467270.html