python二分查找

2020-11-26  本文已影响0人  側耳听偑

python二分查找

# 查找数据

import random

# nums = [random.randint(1,101) for x in range(10)]
nums = [27, 19, 74, 67, 25, 89, 34, 3, 93, 95]
print(nums)

print(nums.index(3))


# print(nums.index(5))
# 问题1 当查找 不存在的数据会报错

# 解决问题:
def find_element(nums, ele):
    for item in enumerate(nums):
        if ele == item[1]:
            return item[0]
    else:
        return -1


# 测试
print(find_element(nums, 35))
print(find_element(nums, 5))


# 问题2 查找效率太低
# 如果将数据放大100倍,在1000个数据中查找数据,那么平均每个数据的查找比较次数是 500次
# 二分查找法

def binary_search(nums, ele):
    # 如果不在列表中不需要查找
    if ele not in nums:
        return -1
    # 左边界
    start = 0
    # 右边界
    stop = len(nums) - 1
    # 左边大于右边才可以查找
    while start <= stop:
        # 确定中值
        mid = (start + stop) // 2
        # 判断,改变左
        if ele > nums[mid]:
            start = mid + 1
        # 判断改变右
        elif ele < nums[mid]:
            stop = mid - 1
        # 找到
        else:
            return mid


# 二分查找必须基于有须数据,所以对数据进行排序
nums.sort()

print(binary_search(nums, 3))
print(binary_search(nums, 95))
print(binary_search(nums, 5))
二分查找示意图.jpg
上一篇 下一篇

猜你喜欢

热点阅读