二分查找

查找函数:

def binary_search(list, item):
    low = 0
    high = len(list) - 1

    while low <= high:
        mid = int((low + high)/2)
        guess = list[mid]
        if guess == item:
            return mid
        if guess > item:
            high = mid - 1
        else:
            low = mid + 1
    return None

测试代码:

my_list = [1, 3, 5, 7, 9]

print(binary_search(my_list, 3))
print(binary_search(my_list, -1))

结果:

1
None

因为python索引是从0开始的,这里找到列表中的第二个元素索引为1。如果想让结果显示为2,只需要修改

        if guess == item:
            return mid+1

让程序在查找后位置加1即可。

问题
1.1 假设有一个包含128个名字的有序列表,你要使用二分查找在其中查找一个名字,请问最多需要几步才能找到?
答案: 7次,对128取log2
1.2 上面列表的长度翻倍后,最多需要几步?
答案:8次,翻倍就是乘以2,给7做一次加法,加1即可


代码和问题参考来源:《算法图解》

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容