• python二分查找


    什么是二分查找:

    二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。 首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

    二分法的使用前提:

    二分法是进行查找最基础的方法。 由于实现方法是使用 left,right 两个指针,每次将搜索区间缩小一半,因此它是一种时间复杂度O(logn) 的方法。 在使用二分法时,一定要注意以下几点:

    1. 数组应该是分段有序的,这样有利于缩小搜索区间。
    2. 如果数组中存在重复元素,那么二分法返回的下标便不是唯一的,根据区间的不同定义可以返回下标的左界和右界。
    3. 二分法的逻辑十分简单,但边界条件的判断是重中之重,要将两种不同的区间定义辨析清楚。

     

     二分查找代码:

    #二分查找用于判断元素是否存在于一个有序的列表里

    1. #二分查找用于判断元素是否存在于一个有序的列表里
    2. def binary_search_0(alist,item):
    3. n=len(alist)
    4. if n==0:
    5. return False
    6. else:
    7. mid=n//2
    8. if item == alist[mid]:
    9. return True
    10. elif item
    11. return binary_search_0(alist[:mid],item)
    12. elif item>alist[mid]:
    13. return binary_search_0(alist[mid+1:],item)
    1. def binary_search_1(alist,item):
    2. first=0
    3. last=len(alist)-1
    4. while first<=last:
    5. mid=(first+last)//2
    6. if alist[mid]==item:
    7. return True
    8. elif item
    9. last=mid-1
    10. elif item>alist[mid]:
    11. first=mid+1
    12. return False
    13. if __name__=="__main__":
    14. alist=[3,5,7,9,12,15,17,24,35,46]
    15. print(binary_search_0(alist,24))
    16. print(binary_search_0(alist,777))
    17. print(binary_search_1(alist,24))
    18. print(binary_search_1(alist,777))

  • 相关阅读:
    因合约代码Bug,约2.2亿元11539枚以太币被永久锁定
    Netty 系列之编解码器和 handler 的调用机制
    Devkit开发框架插件工具——Gzip工程创建
    MySQL 安装报错的解决方法
    解决https页面加载http资源报错
    POJ—1338-丑陋的数字
    小白学Java
    Day710.文字块-Java8后最重要新特性
    小区疫情管理系统
    设计模式-中介者模式
  • 原文地址:https://blog.csdn.net/HYSliuliuliu/article/details/134486188