小陆同学

python 中文名:蟒蛇,设计者:Guido van Rossum

导航

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))

 

posted on 2019-07-18 16:12  小陆同学  阅读(3611)  评论(0编辑  收藏  举报