当二分查找找不到输入值时

问题描述 投票:0回答:1
def binary_search(arr, target):
    low, high = 0, len(arr) - 1

    while low <= high:
        mid = (low + high) // 2

        print(f"current range: {low+1}부터 {high+1}")
        print(f"current mid: {arr[mid]}")

        if arr[mid] == target:
            return mid
        elif arr[mid] < target:
            print(f"target {target} is bigger than {arr[mid]}.")
            low = mid + 1
        elif arr[mid] > target:
            print(f"target {target} is smaller than {arr[mid]}.")
            high = mid - 1
        else:
            return -1


numbers = [str(i) for i in range(1, 101)]

target_number = input("Enter the numbe: ")

index = binary_search(numbers, target_number)

if index != -1:
    print(f"Found {target_number}! ")
else:
    print(f"{target_number} not found.")

如果输入1到100以外的数字,二分查找就无法再进行下去,所以我想返回-1并显示代码的最后一行。 但事实并非如此。我不知道问题是什么。 帮助!!谢谢你

binary-search
1个回答
0
投票

希望这有帮助

def binary_search(arr, target):
    low, high = 0, len(arr) - 1

    while low <= high:
        mid = (low + high) // 2

        print(f"current range: {low+1}부터 {high+1}")
        print(f"current mid: {arr[mid]}")

        if (
            mid == len(arr) - 1 and
            arr[mid] != target
        ):
            return -1

        if arr[mid] == target:
            return mid
        elif arr[mid] < target:
            print(f"target {target} is bigger than {arr[mid]}.")
            low = mid + 1
        elif arr[mid] > target:
            print(f"target {target} is smaller than {arr[mid]}.")
            high = mid - 1
        else:
            return -1

你也将这个nums设置为字符串,我改为整数

numbers = [i for i in range(1, 101)]
© www.soinside.com 2019 - 2024. All rights reserved.