美文网首页
二分查找的一些思考

二分查找的一些思考

作者: 风之旅人c | 来源:发表于2020-03-21 14:52 被阅读0次

[toc]

二分查找

二分查找中常见的疑惑

二分写法通常有很多种,有的时候自己在写的时候往往会纠结与上下界、开闭区间、边界条件等等情况,接下来就对二分写法做一个整理,主要思路来源于知乎。

C++<Alogorithm>标准写法

//返回[first, last)中第一个不小于value的值的位置。
int lower_bound(int *array, int first, int last, int value)
{
    while(first < last)
    {
        int mid = first + (last - first) / 2;
        if(array[mid] < value)
            first = mid + 1;
        else last = mid;
    }
    //return last也可以,区间为空时first、last重合。
    return first;
}

Notes

  • 区间一定是左闭右开,这样做的好处有很多。
    • 区间两端的数值之间相减正好为区间的长度。[a,b)的长度length = b-a。
    • 相邻区间判断比较简单,[0,2)和[2,4)可以很轻易地看出。
  • 如果想求的不是 第一个不小于value的值,而是 任意等于value的值,只需要在循环开始加一个判断array[mid] == value。

严格定义二分查找定义

定义lower_bound函数:给定数组array、区间[first, last)和一个目标值value,返回区间第一个大于等于value的元素的位置。若不存在,返回last。

如何取中点

算法中取中点是这样写的:

int mid = first + (last - first) / 2; //防溢出
  • 上位中位数:first + length / 2;
  • 下位中位数:first + (lenth - 1) / 2;
  • 以上两个均可以使用。

边界条件

参考:https://www.zhihu.com/question/36132386

相关文章

  • 二分查找的一些思考

    [toc] 二分查找 二分查找中常见的疑惑 二分写法通常有很多种,有的时候自己在写的时候往往会纠结与上下界、开闭区...

  • 数据结构和算法--二分查找

    二分查找 二分查找的思想 二分查找(Binary Search)算法,也叫折半查找算法。 二分查找针对的是一个有序...

  • python二分查找算法

    文章概述 二分查找法介绍 简单查找与二分查找对比 二分查找  二分查找算法主要思想:在有序列表中查找指定元素,先从...

  • 二分查找

    [TOC] 二分查找的基础模板 二分查找靠左的Index基础模板 二分查找靠右的Index基础模板 二分查找插入t...

  • 二分查找

    什么是二分查找?二分查找,也叫折半查找(Binary Search),它是一种效率较高的查找方法。二分查找的条件:...

  • 分治算法(swift二分法排序递归实现)

    二分查找 1、二分查找(Binary Search) 2、二分查找的基本思想 swift算法实现

  • 可查找重复元素的二分查找算法

    可查找重复元素的二分查找算法 二分查找算法思想:又称为 折半查找,二分查找适合对已经排序好的数据集合进行查找。假设...

  • 二分查找法

    二分查找法 二分查找法(递归)

  • 二分查找(递归、非递归)

    二分查找(递归) 二分查找(非递归)

  • 二分查找(递归、非递归)

    二分查找(递归) 二分查找(非递归)

网友评论

      本文标题:二分查找的一些思考

      本文链接:https://www.haomeiwen.com/subject/reisyhtx.html