• 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

    性能;

    非递归比递归 效率高

  • 相关阅读:
    忙活了半宿,写了个小玩意
    luogu P5171 Earthquake
    luogu P1850 换教室
    luogu P2507 [SCOI2008]配对 |动态规划
    luogu P3830 [SHOI2012]随机树
    luogu P3959 宝藏
    牛客竞赛-比赛
    牛客竞赛-Who killed Cock Robin
    luogu P3807 【模板】卢卡斯定理
    牛客竞赛 -被3整除的子序列
  • 原文地址:https://www.cnblogs.com/shunyu/p/8467270.html
Copyright © 2020-2023  润新知