📜  数据结构|数组|问题2(1)

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

数据结构 | 数组 | 问题2

在编程中,数组是一种非常基础且常用的数据结构,它可以存储多个相同数据类型的元素,并通过index对元素进行访问和操作。

针对数组这种数据结构,有很多常见且有趣的问题。其中问题2是:如何在一个已排序的数组中找到特定元素的位置?

思路

因为数组已经是有序的了,所以可以采用二分法查找的思路,将数组不断地分为两个部分,然后判断特定元素是在左半边还是右半边,最后逐步缩小范围,直到找到目标元素的位置。

具体如下:

  1. 设置左右指针,left指向数组的第一个元素,right指向数组的最后一个元素。

  2. 当left<=right时,执行以下过程:

    • 令mid为left和right的中间值,即mid = (left+right)//2
    • 如果目标元素等于mid,直接返回mid
    • 如果目标元素小于mid,那么目标元素只可能在左半边,所以更新right为mid-1
    • 如果目标元素大于mid,那么目标元素只可能在右半边,所以更新left为mid+1
  3. 若数组中没有目标元素,则返回-1.

实现代码如下:

def binary_search(arr, target):
    left, right = 0, len(arr)-1
    
    while left <= right:
        mid = (left + right) // 2
        if arr[mid] == target:
            return mid
        elif arr[mid] < target:
            left = mid+1
        else:
            right = mid-1
    
    return -1
测试

接下来对代码进行测试,使用assert语句断言代码的正确性:

arr = [1,2,3,4,5,6,7,8,9]

assert binary_search(arr, 3) == 2
assert binary_search(arr, 8) == 7
assert binary_search(arr, 0) == -1
assert binary_search(arr, 10) == -1

测试结果符合预期,说明代码是可靠的。

总结

二分查找是一种高效的查找算法,对于有序数组这种情况尤为适用。在实现时需要注意边界条件和数组中没有目标元素的情况,避免出现错误。