实验六:折半(二分)查找法(python实现)

代码实现:

def binary_search(sorted_arr, k):
    low, high = 0, len(sorted_arr) - 1
    count = 0  # 查找次数
    while low <= high:
        count += 1
        mid = (low + high) // 2
        if sorted_arr[mid] == k:
            return 1, mid + 1, count  # 返回位置(1-based index)和查找次数
        elif sorted_arr[mid] > k:
            high = mid - 1
        else:
            low = mid + 1
    return 0, 0, count  # 如果未找到,返回0和查找次数


def main():
    T = int(input())  # 测试次数

    results = []

    for _ in range(T):
        n, *arr = map(int, input().split())
        k = int(input())

        # 先将数组排序
        sorted_arr = sorted(arr)

        tes, position, count = binary_search(sorted_arr, k)
        results.append(f"{tes} {position} {count}")

    for result in results:
        print(result)


if __name__ == "__main__":
    main()

# 2
# 5 3 5 4 2 7
# 4
# 6 4 8 3 1 6 2
# 7

结果输出:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值