首页 > 其他分享 >二分查找

二分查找

时间:2023-04-09 22:13:46浏览次数:50  
标签:二分 arr int mid 查找 left

#include <iostream>
using namespace std;
int binaryFind(int* arr, int len, int target)
{
    int left = 0;
    int right = len;  # 不要用sizeof(arr)/sizeof(arr[0])求数组长度,这样相当于求一个指针所占字节数8/4=2,引入参数len
    while (left <= right)
    {
        int mid = (left + right) / 2;
        if (target > arr[mid])
        {
            left = mid + 1;  # 为什么要+1,而不left = mid? 因为 mid 已经搜索过,应该从搜索区间中去除。不+有时会出错,比如(1,2) mid==(1+2)/2==1
        }
        else if (target < arr[mid])
        {
            right = mid - 1;
        }
        else
        {
            return mid;
        }
    }
}
int main()
{
    int n;
    cin >> n;
    int* arr = new int[10];
    for (int i = 0; i < n; i++)
    {
        cin >> arr[i];
    }
    int num;
    cin >> num;

    cout << "num的下标为" << binaryFind(arr, n, num) << endl;

    return 0;
}

关于二分查找算法更多细节: 二分查找算法细节详解_二分查找为什么要加一减一_marytime的博客-CSDN博客

标签:二分,arr,int,mid,查找,left
From: https://www.cnblogs.com/xuan4ever/p/17301163.html

相关文章

  • 18.LUT查找表
    前面介绍的阈值比较方法中只有一个阈值,如果需要与多个阈值进行比较,就需要用到显示查找表(Look-Up-Table,LUT)。LUT查找表简单来说就是一个像素灰度值的映射表,它以像素灰度值作为索引,以灰度值映射后的数值作为表中的内容。例如我们有一个长度为5的存放字符的数组,LUT查找表就是通过......
  • 二分答案的实际应用与变式
    一.二分查找之于STLlower_bound()可以寻找第一个大于等于的upper_bound()可以寻找第一个大于的返回直应用auto承载,或在获取指针时-数组名/-vec.begin()distance(st.begin(),st.end())也可以获得其中元素个数和以上两个函数相作用,其用法不言而喻二.二分法求函数值使用前提:函......
  • LeetCode习题——在排序数组中查找元素的第一个和最后一个位置(二分查找)
    在排序数组中查找元素的第一个和最后一个位置力扣链接:在排序数组中查找元素的第一个和最后一个位置题目给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1,-1]。你......
  • 数据结构 玩转数据结构 12-3 检查二分搜索树性质和平衡性
    0课程地址https://coding.imooc.com/lesson/207.html#mid=14348 1重点关注1.1代码草图   1.2代码实现检查二分搜索树和平衡性利用了二分搜索树中序遍历由小到大的特性 和平衡二叉树的平衡因子大于1的特性//1校验二分搜索......
  • python中的二分查找
    二分查找的前提是查找的数据按照顺序排序二分查找的核心思想是递归#arr:查找的对象#left:arr的左边界#right:arr的右边界#x:需要查找的数defbinary_search(arr,left,right,x):#左边界小于等于右边界ifleft<=right:#得到中位数mid=int((lef......
  • [每天例题] 查找输入整数二进制中1的个数
    查找输入整个二进制中1的个数题目 题目分析计算它在二进制下的1的个数。注意多组输入输出!!!!!! 数据范围:1≤n≤2^31 −1 思路分析1.多组数据的输入方法:1.EOF法因为在线评测系统的输入数据存放在一个文件中,因此可以通过文件是否结束的方式判断输入的数据是否结束。scanf......
  • [蓝桥杯 2021 国 AB] 翻转括号序列(线段树上二分)
    [蓝桥杯2021国AB]翻转括号序列题目描述给定一个长度为\(n\)的括号序列,要求支持两种操作:将\(\left[L_{i},R_{i}\right]\)区间内(序列中的第\(L_{i}\)个字符到第\(R_{i}\)个字符)的括号全部翻转(左括号变成右括号,右括号变成左括号)。求出以\(L_{i}\)为左端点......
  • HDU - 3081 Marriage Match II(二分图最大匹配 + 并查集)
    题目大意:有n个男生n个女生,现在要求将所有的男女配对,所有的男女都配对的话,算该轮游戏结束了。接着另一轮游戏开始,还是男女配对,但是配对的男女不能是之前配对过的。问这游戏能玩多少轮男女能配对的条件如下1.男女未曾吵架过。2.如果两个女的是朋友,那么另一个女的男朋友可以和......
  • HDU - 3715 Go Deeper (二分 + 2-SAT)
    题目大意:给出一个递归函数,问这个递归函数最多能递归几层解题思路:二分枚举递归层数,然后依此建边如果给出的c[i]为0时,那么x[a[i]]和x[b[i]]中的其中一个要为真,连边即为!a[i]->b[i],!b[i]->a[i]如果给出的c[i]为1时,那么x[a[i]]和x[b[i]]两个要么都为真,要么都为假,连边即为a[i]->b[i......
  • pg数据库查找外键但没有索引的sql
    SELECTpg_index.indexrelid::regclass,'createindex'||relname||'_'||array_to_string(column_name_list,'_')||'_idxon'||conrelid||'('||array_to_string(column_name_list,......