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

    二分法查找又称折半查找。二分法查找是在一个有序列表的基础上完成的,要查找的值x和列表的中间值m作比较,如果x大于m,那么接下来从m+1的右区间内再以相同方法取中间值做判断,循环往复此过程,直到判断出x=m的时候就是查找成功。否则相反。返回类型为布尔值

    时间复杂度为 O(logn) 空间复杂度:O(1)

    两种实现二分法查找的方法:递归、非递归    代码奉上

    # 递归实现:                                                       
    def binary_seach(alist,item):
        if len(alist) == 0:
            return False
        else:
            mid = len(alist) // 2   # middle 记录中间位置索引
            if item == alist[mid]:  # 如果查找元素与中间位置元素相等 则返回真
                return True
            elif item < alist[mid]:  # 如果查找元素小于中间位置元素,则进行列表切片缩小列表范围
                return binary_seach(alist[:mid],item)
            else:
                return binary_seach(alist[mid+1:],item)
    if __name__ == '__main__':
        alist = [5, 10, 15, 18, 35, 55, 65, 75, 99]
        print(binary_seach(alist,200))   # 查找列表中不存在的数据
        print("__________________")
        print(binary_seach(alist,15))     # 查找列表中存在的数据
    #非递归实现:                                                                                                                   
    def binary_seach(alist,item):
        first = 0                                # 起始下标为0 
        last = len(alist) - 1                    # 列表最后一位的索引
        while first <= last:                     # 列表中间位置的索引值
            mid = (first + last) // 2
            if item == alist[mid]:
                return True
            elif item < alist[mid]:
                last = mid -1
            else:
                first = mid + 1
        else:
            return False
    if __name__ == '__main__':
        alist = [5,10,15,18,35,55,65,75,99]  # 有序序列
        print(binary_seach(alist, 200))
  • 相关阅读:
    memcached的PHP扩展之PECL/memcache与PECL/memcached区别
    SQL*PLUS SET变量
    Centos中安装memcached
    HP Unix常用命令
    phpmbstring
    安装memcache到CentOS(另附yum法)
    CF Educational Codeforces Round 57划水记
    [NOIP2018]旅行(数据加强版)(图论+基环树)
    JavaScript DOM高级程序设计
    应用程序权限设计
  • 原文地址:https://www.cnblogs.com/lutt/p/11208005.html
Copyright © 2011-2022 走看看