欢迎访问宙启技术站
智能推送

binarySearch()函数实现二分查找。

发布时间:2023-05-31 21:17:13

二分查找又被称为折半查找,是一种基于比较目标值和数组中间元素的策略来查找的算法。它的时间复杂度为O(log n),比线性查找的O(n)复杂度要优秀许多。本文将介绍如何实现二分查找的关键函数——binarySearch()。

二分查找的核心思想是将有序数组从中心分割成两个子数组,然后比较每个子数组的中间元素与目标值。通过丢弃其中一个子数组,将搜索空间缩小一半并重复这个过程,直到找到目标值或确定它不存在为止。

binarySearch()函数也是一种递归算法,它接收如下参数:

参数1:已排序的数组

参数2:搜索的值

参数3:数组的头部索引

参数4:数组的尾部索引

函数的返回值是搜索值所在的索引,如果搜索值不存在,则返回-1。

下面是binarySearch()函数的JavaScript实现代码:

function binarySearch(arr, value, left, right){
    //区间左端点不能大于右端点
    if(left > right){
        return -1;
    }
    //获取区间中点
    var mid = Math.floor((left + right) / 2);
    //中点等于目标值
    if(arr[mid] === value){
        return mid;
    }
    //目标值在左侧数组
    else if(arr[mid] > value){
        return binarySearch(arr, value, left, mid - 1);
    }
    //目标值在右侧数组
    else{
        return binarySearch(arr, value, mid + 1, right);
    }
}

在这个实现中,首先判断区间左端点是否大于右端点,如果是,直接返回-1,说明搜索不到值。

接下来求出区间的中点。如果中点等于目标值,就直接返回这个中点的索引,代表搜索成功。如果中点的值大于目标值,就说明目标值在左侧数组中,于是重新调用binarySearch()函数,在左侧数组中二分查找,继续搜索。如果中点的值小于目标值,就说明目标值在右侧数组中,同样调用binarySearch()函数,在右侧数组中继续二分查找。

这个函数实现比较简单粗暴,但却非常高效。因为在每一次判断时,都是将搜索区间缩小一半,直到找到目标值或搜索区间为1。因此,在最坏情况下,binarySearch()函数的时间复杂度是O(log n)。

此外,在进行二分查找时,必须要保证数组是有序的才行。而对于无序数组,我们可以先使用sort()函数进行排序,再使用binarySearch()函数进行查找。

总的来说,binarySearch()函数是实现二分查找的核心函数,在具体应用中需要根据实际情况进行适当改动。