zoukankan      html  css  js  c++  java
  • 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

    性能;

    非递归比递归 效率高

  • 相关阅读:
    hdu 4963(中途相遇法)
    UVALive 6869(后缀数组)
    AC自动机小结
    poj 2409+2154+2888(Burnside定理)
    HUST 1569(Burnside定理+容斥+数位dp+矩阵快速幂)
    bunoj 34990(hash)
    CSU 1506(最小费用最大流)
    CF 514C(hash)
    lightoj 1297(三分)
    lightoj 1179(线段树)
  • 原文地址:https://www.cnblogs.com/shunyu/p/8467270.html
Copyright © 2011-2022 走看看