zoukankan      html  css  js  c++  java
  • 二分查找

    • 二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后 fp 两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
     1 #使用循环实现二分法(非递归)
     2 def binary_search(alist,v):
     3     n=len(alist)
     4     start=0
     5     end=n-1
     6     while start<=end:
     7         mid=(start+end)//2
     8         #判断中间值与比较的值v
     9         if alist[mid] == v:
    10             return True
    11         elif alist[mid] > v: #左边列表查找
    12             end=mid-1
    13         else:
    14             start=mid+1
    15     return False
    16 
    17 #递归方式实现
    18 def binary_search2(alist,v):
    19     n=len(alist)
    20     #递归出口
    21     if n==0:
    22         return False
    23     mid=n//2
    24     if alist[mid] == v:
    25         return True
    26     elif alist[mid] < v: #右边列表查找
    27         return binary_search(alist[mid+1:],v)
    28     else :
    29         return  binary_search(alist[0:mid],v)
    30 
    31 if __name__ == '__main__':
    32     alist=[1,2,3,4,5,6,7,8,9]
    33     print(binary_search(alist,9))
    34     print(binary_search(alist,19))
    35     print(binary_search2(alist,9))
    36     print(binary_search2(alist,19))
    正是江南好风景
  • 相关阅读:
    VS2015 出现 .NETSystem.Runtime.Remoting.RemotingException: TCP 错误
    C#学习笔记------参数
    C#简单工厂和抽象类的实例
    css基础1
    html中的div span和frameset框架标签
    关于C#委托的一些学习笔记
    html基础加强2
    HTML基础加强
    利用GDI+在Winfrom绘制验证码
    winfrom如何在listview中添加控件
  • 原文地址:https://www.cnblogs.com/monsterhy123/p/12757470.html
Copyright © 2011-2022 走看看