本文介绍: 二分法:顾名思义,把问题分为2的处理,是一种常见搜索算法用于有序数组或这有序列表查找指定元素位置,它的思想是将待搜索区间不断二分然后比较目标值与中间元素大小关系然后确定下一步搜索方向。确定搜索区间的起始位置 left结束位置 right,通常初始时 left数组第一个元素索引right数组最后一个元素索引。如果目标值小于中间元素,则目标值可能在左半部分更新 right = mid – 1。如果目标值等于中间元素,则找到了目标值返回中间元素索引

分法:顾名思义,把问题分为2的处理,是一种常见搜索算法,用于在有序数组或这有序列表查找指定元素位置,它的思想是将待搜索区间不断二分然后比较目标值与中间元素大小关系然后确定下一步搜索方向

以下是二分法基本步骤
确定搜索区间的起始位置 left结束位置 right,通常初始时 left数组第一个元素的索引right数组最后一个元素的索引。
在每一次循环中,计算中间位置 mid,即 mid = (left + right) / 2。
比较目标值与中间元素的大小关系
如果目标等于中间元素,则找到了目标值,返回中间元素的索引。
如果目标值小于中间元素,则目标值可能在左半部分更新 right = mid – 1。
如果目标值大于中间元素,则目标值可能在右半部分,更新 left = mid + 1。
重复步骤 2-3,直到找到目标值或搜索区间为空(即 left > right)。

力扣(LeetCode)官网 – 全球极客挚爱的技术成长平台

思路

标签:二分查找
过程
设定左右指针
找出中间位置,并判断位置是否等于 target
nums[mid] == target返回该位置下标
nums[mid] > target右侧指针移到中间
nums[mid] < target 则左侧指针移到中间
时间复杂度:O(logN)

 c++代码实现

class Solution {
public:
    int search(vector<int>& nums, int target) {
   int left=0;
   int right=nums.size()-1;
   while(left<=right){
       int mid=left+(right-left)/2;
       if(nums[mid]==target){
           return mid;
       }
       else if(nums[mid]<target){
           left=mid+1;
       }
       else
       right=mid-1;
   }
   return -1;

    }
};

 c语言写法

int search(int* nums, int numsSize, int target) {
    int left=0;
    int right=numsSize-1;
    while(left<=right){
        int mid=left+(right-left)/2;
        if(nums[mid]<target){
            left=mid+1;
        }
       else if(nums[mid]>target){
            right=mid-1;
        }
        else
        return mid;
    }
    return -1;
}

 用递归来做

int binarySearchRecursive(int* nums, int left, int right, int target) {
    if (left > right) {
        return -1; // 搜索区间为空未找到目标值
    }

    int mid = left + (right - left) / 2;

    if (nums[mid] == target) {
        return mid; // 找到目标值,返回索引
    } else if (nums[mid] < target) {
        return binarySearchRecursive(nums, mid + 1, right, target); // 目标值可能在右半部分
    } else {
        return binarySearchRecursive(nums, left, mid - 1, target); // 目标值可能在左半部分
    }
}

原文地址:https://blog.csdn.net/m0_59001573/article/details/134698088

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_34236.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注