自学内容网 自学内容网

[C语言]二分查找

        进行二分查找的前提是在一个有序排列的数组中查找指定元素。

        例如,对一个升序排列的整型数组进行二分查找:

// 二分查找
// 参数1:arr--需要传入一个有序的、按升序排列(从小到大)的整型数组
// 参数2:len--数组的长度(数组的元素个数)
// 参数3:target--要查找的元素

// 返回值:返回找到的元素在数组中的下标(索引index),如果没有找到,则返回-1
int binary_search(int *arr, int len, int target)
{
    int left = 0; // 起始索引
    int right = len - 1; // 结束索引
    while (left <= right) // 如果起始索引和结束索引没有重合,继续查找
    {
        int mid = (left + right) / 2; // 中间索引,这么写能够防止整型溢出
        // 也可以写成 int mid = left + (right - left) / 2; 
        // 这两条代码是一样的

        if (arr[mid] == target)
        {
            // 如果找到了元素,返回索引
            return mid;
        }
        else if (arr[mid] < target)
        {
            // 如果当前的中间值小于要查找的目标元素,说明目标可能在右侧,
            // 需要调整左边界(起始索引)
            left = mid + 1;
        }
        else
        {
            // 如果当前的中间值大于要查找的目标元素,说明目标可能在左侧,
            // 需要调整右边界(结束索引)
            right = mid - 1;
        }
    }

    // 如果起始索引和结束索引重合了都没有找到目标元素,说明这个元素不在当前数组中,
    // 返回-1
    return -1;
}


原文地址:https://blog.csdn.net/bell00110100/article/details/137519241

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!