二分查找法

def binary_search(arr, target):
    """
    在有序数组中使用二分查找法查找目标值。

    :param arr: 一个已排序的数组
    :param target: 需要查找的目标值
    :return: 一个包含目标值的索引和查找次数的元组,如果未找到则返回 (-1, 查找次数)
    """
    left, right = 0, len(arr) - 1
    count = 0  # 用于计数查找次数

    while left <= right:
        mid = left + (right - left) // 2  # 计算中间索引,避免直接加法可能导致溢出
        
        # 检查中间元素
        if arr[mid] == target:
            return mid, count  # 找到目标值,返回索引和查找次数
        elif arr[mid] < target:
            left = mid + 1  # 目标值在右侧
        else:
            right = mid - 1  # 目标值在左侧
            
        count += 1  # 每次查找时计数加一
        
    return -1, count  # 未找到目标值,返回-1和查找次数


# 示例使用
if __name__ == "__main__":
    sorted_array = [value for value in range(1, 1025)]
    target_value = 1024
    result, search_count = binary_search(sorted_array, target_value)
    if result != -1:
        print(f"目标值 {target_value} 在数组中的索引为: {result} 进行了 {search_count} 次查找")
    else:
        print(f"目标值 {target_value} 不在数组中,进行了 {search_count} 次查找")


posted @ 2025-10-29 16:01  Clefairy  阅读(6)  评论(0)    收藏  举报