大数据,机器学习,人工智能机器学习与数据挖掘机器学习_Python算法

Python数据结构与算法11——二分法查找

2019-09-26  本文已影响0人  皮皮大

二分查找

折半查找,比较次数少,速度快,只能作用于有序数组和顺序表

代码实现

# coding: utf-8

def binary_search(alist, item):
    # 二分查找,递归版本
    n = len(alist)
    
    # 只有if条件才能进行操作
    if n > 0:
        mid = n // 2
        if alist[mid] == item:
            return True
        elif item < alist[mid]:
            # item在左边部分继续查找
            return binary_search(alist[:mid], item)
        else:
            # 右边继续查找
            return binary_search(alist[mid+1:], item)
    return False


# 非递归二分查找
def binary_search2(alist, item):
    # 非递归
    n = len(alist)
    first = 0
    last = n-1
    
    while first <= last:
        mid = (first + last) // 2
        if alist[mid] == item:
            return True
        # 下面的语句只是将搜索的范围缩小
        elif item < alist[mid]:
            last = mid - 1
        else:
            first = mid + 1
    return False

if __name__ == "__main__":
    li = [1, 3, 4, 6, 7 ,8 ,9, 10, 17]
    print(binary_search(li, 8))
    print(binary_search(li, 88))
    
    print(binary_search2(li, 8))
    print(binary_search2(li, 88))
上一篇 下一篇

猜你喜欢

热点阅读