浅谈二分查找

定义

In computer science, binary search, also known as half-interval search, logarithmic search, or binary chop, is a search algorithm that finds the position of a target value within a sorted array.

Binary search compares the target value to the middle element of the array;

if they are unequal, the half in which the target cannot lie is eliminated and the search continues on the remaining half until it is successful.

If the search ends with the remaining half being empty, the target is not in the array.

引用来自维基百科 Binary search algorithm

二分查找是一种搜索的算法,在有序数组中,根据目标值找到其位置。

比较目标值与数组的中间元素,如果不相等,不位于目标值的一半将会被淘汰,然后继续在另一半中搜索直到找到为止。

如果另一半中搜索是空,那么这个目标值不在数组中。

举例

比如你要登录淘宝,你的用户名叫kk,那么你登录的时候,淘宝的数据库要去搜索一下kk是否在其中,当然他不可能从a开始查起,应该从字典序的中间开始。小了,向后找,大了,向前找。

那么再举个例子,比方说,我在1 - 100 之间想一个数,你来猜,你的目标是尽可能少的次数来猜到这个数,然后我根据结果回复大了还是小了还是猜对了。

假如你从1开始递增猜,如果我想的是99,你要猜99次。

换种思路,从一半的位置开始猜,就是50,如果回复小了,那么结果就在51-100,直接排除掉前50个选项。依次进行,结果就只用7次就一定可以猜对。

我是怎么得到7次的呢,每次筛选掉一半的值

7 > log2100

所以是7次。

也就是说这个算法的效率是

O(logn)

代码

#include<iostream>
using namespace std;
int BinarySearch(int a[], int n, int element)
{
    int begin = 0, last = n - 1;
    int middle;
    while (begin <= last)
    {
        middle = (begin + last) / 2;
        if (element < a[middle])//查找的这个数小于中间值
            last = middle - 1;
        else if (element > a[middle])//查找到这个数大于中间值
            begin = middle + 1;
        else  //相等返回索引
            return middle;
    }
    return -1;//数组中没有这个查找的值
}
int main()
{
    int n, a[100];
    int digit;
    cout << "请输入元素个数" << endl;
    cin >> n;
    cout << "请输入各元素的值" << endl;
    for (int i = 0; i < n; i++)
        cin >> a[i];

    cout << "请输入要查找的值" << endl;
    cin >> digit;
    cout << "索引是";
    cout << BinarySearch(a, n, digit)<<endl;
    return 0;
}
时间: 2024-10-10 08:26:37

浅谈二分查找的相关文章

浅谈二分和二分答案

一般来讲我们会在以下情况用到二分: 求单调函数的零点 求一堆东西的最小值最大是多少 很难直接算出答案,但是很好判定答案合不合法 如果想学就继续看吧! 二分查找 二分是一种可以再\(\mathcal{O}(\mathrm{ch}\log m)\)(\(m\)为数据规模,\(\mathrm{ch}\)为判断状态合法性check()函数时间复杂度)时间复杂度内求解问题的方法,主要是一个分治,每次将搜索范围减半. 我们以二分查找引入. 有一个有序序列,二分查找的思想如下: 1.定义L,R,mid代表答案

浅谈数据结构-查找

在上万条数据中,查找制定元素,这就是查找完成的功能. 查找表:由同一种类型元素构成的集合,由于"集合"中数据元素之间存在松散的关系,因此查找表是一种灵活应用的数据结构. 查找表的操作: 查询某个特定的数据元素是否在查找表中. 查询某个特定元素的各种属性. 在查找表中制定位置插入一条数据. 从查找表中删除特定的数据元素. 查找表中四个操作之间是紧密关联的,比如,插入一个数据:首先判断元素是否在查找表中,有,返回,没有插入.判断一个元素在查找表中,先是查找元素,然后获取属性,然后和插入的元

浅谈二分答案的原理和相关应用

一.二分答案的原理和过程 1.适用范围: 当一个问题的解满足单调性(结果与询问数值成正相关或负相关)且待枚举数量,出现"最大值最小"或"最小值最大"等时,我们可以对答案进行二分: 2.原理: 1.在二分答案前,找出答案所在区间,即[L,R]: 2.用valid函数验证当前值的可行性: 3.迭代求解的过程中,每次计算一个mid=(L+R)/2,若valid(mid)==true时,根据单调性,选择更接近于不可能的一半区间,反之取另一半区间: 3.代码实现(以求最大值最

浅谈二分

太极生两仪,两仪生四象,四象生八卦,阴阳交媾万物生. 若要你在全校同学当中猜我心里想的那个人,允许你问若干个问题,使问问题次数尽量少,你肯定会问我那个人是男生还是女生.因为这样,可以筛掉一半的人.并且在数学期望上来说,你肯定会尽量问一些能筛掉一半的问题,将问题的答案集合一分为二.假设你直接问是不是***,我说不是的话,你这个问题就问得十分无力了,因为它只帮你排除了一个人.所以,每次问可以筛掉一半备选集合的问题,显然是一种很聪明的做法. 世间万物始于混沌,根据太极生两仪,两仪生四象,四象生八卦,我

浅谈算法和数据结构: 十 平衡查找树之B树

转载自 http://www.cnblogs.com/yangecnu/p/3632027.html 浅谈算法和数据结构: 十 平衡查找树之B树 前面讲解了平衡查找树中的2-3树以及其实现红黑树.2-3树种,一个节点最多有2个key,而红黑树则使用染色的方式来标识这两个key. 维基百科对B树的定义为“在计算机科学中,B树(B-tree)是一种树状数据结构,它能够存储数据.对其进行排序并允许以O(log n)的时间复杂度运行进行查找.顺序读取.插入和删除的数据结构.B树,概括来说是一个节点可以拥

浅谈算法和数据结构: 七 二叉查找树 八 平衡查找树之2-3树 九 平衡查找树之红黑树 十 平衡查找树之B树

http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html 前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的时候具有较高的灵活性,而有序数组在查找时具有较高的效率,本文介绍的二叉查找树(Binary Search Tree,BST)这一数据结构综合了以上两种数据结构的优点. 二叉查找树具有很高的灵活性,对其优化可以生成平衡二叉树,红黑树等高效的查找和插入数据结构,后文会一一介绍. 一 定义 二叉查找树(B

浅谈算法和数据结构: 九 平衡查找树之红黑树

原文:浅谈算法和数据结构: 九 平衡查找树之红黑树 前面一篇文章介绍了2-3查找树,可以看到,2-3查找树能保证在插入元素之后能保持树的平衡状态,最坏情况下即所有的子节点都是2-node,树的高度为lgN,从而保证了最坏情况下的时间复杂度.但是2-3树实现起来比较复杂,本文介绍一种简单实现2-3树的数据结构,即红黑树(Red-Black Tree) 定义 红黑树的主要是像是对2-3查找树进行编码,尤其是对2-3查找树中的3-nodes节点添加额外的信息.红黑树中将节点之间的链接分为两种不同类型,

整体二分浅谈

整体二分浅谈 一.前置知识 在学习整体二分之前,要学会二分,以及二分的分治思想. 二.整体二分浅谈及例题 例题:bzoj2527: [Poi2011]Meteors 对于这道题是整体二分的经典例题,我们先抛开整体二分,思考二分怎么做.对于一个询问,因为答案有单调性,如果$x$时刻为最小可以时刻,则比$x$小的时刻都不可以,比$x$大的时刻都可以,所以我们可以进行二分答案,并加以验证.先不说怎样验证,就单是时间复杂度就不能接受,$O(nmlog_2^n)$. 如果一个一个进行二分时间复杂度不允许,

转 浅谈算法和数据结构: 十 平衡查找树之B树

前面讲解了平衡查找树中的2-3树以及其实现红黑树.2-3树种,一个节点最多有2个key,而红黑树则使用染色的方式来标识这两个key. 维基百科对B树的定义为"在计算机科学中,B树(B-tree)是一种树状数据结构,它能够存储数据.对其进行排序并允许以O(log n)的时间复杂度运行进行查找.顺序读取.插入和删除的数据结构.B树,概括来说是一个节点可以拥有多于2个子节点的二叉查找树.与自平衡二叉查找树不同,B-树为系统最优化大块数据的读和写操作.B-tree算法减少定位记录时所经历的中间过程,从而