二分查找算法

【问题描述】请使用二分查找算法在n个升序排列的整数中,查找整数x是否存在,若存在,输出“找到了,在列表中位置为x”,否则输出“未找到”

【输入形式】使用input函数输入n、x以及n个有序整数

【输出形式】使用print函数输出结果。

【样例输入】第一行输入n的值,第二行到第六行输入n个数据的值(注意升序输入),最后一行输入待查找数据。

4

2

3

4

6

4

【样例输出】

找到了,在列表中位置为2

【样例说明】
【评分标准】

a=eval(input())
b=[]
for i in range (0,a):
    c=eval(input())
    b.append(c)
d=eval(input())
for j in range (0,a):
    if b[j]==d:
        print("找到了,在列表中位置为{}".format(j))
        break
    else:
        if j==a-1:
            print("未找到")
def binary_search(arr, start, end, x):
    if end >= start:
        mid = start + (end - start) // 2

        # 如果中间元素是目标元素,则返回其下标
        if arr[mid] == x:
            return mid

        # 如果中间元素大于目标元素,则在左半部分查找
        elif arr[mid] > x:
            return binary_search(arr, start, mid - 1, x)

        # 如果中间元素小于目标元素,则在右半部分查找
        else:
            return binary_search(arr, mid + 1, end, x)

    # 如果未找到目标元素,则返回 -1
    else:
        return -1


n = int(input())  # 输入 n 的值
lst = []  # 用来存储 n 个有序整数
for i in range(n):
    num = int(input())  # 逐个输入有序整数并存入 lst 中
    lst.append(num)
x = int(input())  # 输入待查找数据
result = binary_search(lst, 0, n - 1, x)  # 在 lst 中查找 x

if result != -1:
    print("找到了,在列表中位置为{}".format(result ) )
else:
    print("未找到")

你可能感兴趣的:(python)