📌  相关文章
📜  国际空间研究组织 | ISRO CS 2009 |问题 6(1)

📅  最后修改于: 2023-12-03 15:37:14.511000             🧑  作者: Mango

国际空间研究组织 | ISRO CS 2009 | 问题 6

这是一道关于二分查找的算法题。以下是该问题的题面:

给定一个已排序的 n 个元素的数组,要使用二分查找算法确定一个元素 x 是否在数组中。二分查找算法的每一次比较都使得搜索范围缩小一半。

请写出二分查找的实现,并返回元素 x 在数组中的索引值。若 x 不在数组中,则返回 -1。

思路

二分查找的基本思路是:首先取整个数组的中间元素 mid,然后与待查找元素 x 进行比较。

若 x 等于 mid,返回 mid 的下标。

若 x 小于 mid,则在数组的左半边寻找。

若 x 大于 mid,则在数组的右半边寻找。

以上过程是递归的。

代码

以下是二分查找的 Python 代码实现:

def binary_search(arr, x, low, high):
    if high >= low:
        mid = (high + low) // 2
        if arr[mid] == x:
            return mid
        elif arr[mid] > x:
            return binary_search(arr, x, low, mid - 1)
        else:
            return binary_search(arr, x, mid + 1, high)
    else:
        return -1

传入参数为:

  • arr:要查找的数组;
  • x:待查找的元素;
  • low:数组开始位置下标;
  • high:数组结束位置下标。
示例

输入以下参数:

arr = [1, 3, 5, 7, 9]
x = 3
low = 0
high = len(arr) - 1

运行该函数:

binary_search(arr, x, low, high)

输出结果:

1  # 即元素 3 在数组 arr 中的索引为 1

输入以下参数:

arr = [1, 3, 5, 7, 9]
x = 4
low = 0
high = len(arr) - 1

运行该函数:

binary_search(arr, x, low, high)

输出结果:

-1  # 即元素 4 不在数组 arr 中
总结

二分查找是一种基于分治思想的查找算法,其时间复杂度为 O(log n)。该算法假定所查找的数组是有序的,因此需要对数组进行排序。由于排序成本额外的开销,对于不经常变化的数据集,二分查找算法的效率比较高。