目录

前言

一、二分查找是什么?

二、代码示例

三、算法时间复杂度

总结


前言

二分查找是一种高效的查找算法,二分查找又称为折半查找,其输入是一个有序(升序或降序)的元素列表。本文通过具体的例子来说明什么是是二分查找。


一、二分查找是什么?

二分查找是一种高效的查找算法。下面的实例说明了二分查找的实现原理。我随便想一个1~100的数字,你的目标是以最少的次数猜到这个数字。你每次猜测后,我会提示说大了、小了或对了。假定你从1开始往上猜(当然实际上谁都不会从1开始去猜),那么猜测过程会是下面这样。

很显然,从前往后去猜,这是一种非常糟糕的猜想策略。如果我想的数字100,你得猜100次才能猜到。通常我们会这么去猜,第一次的猜测值是中间数,如50,后面的猜测每次都是确定区间的中间值(如51~100的中间值75),猜测的过程如下图所示。

以上就是二分查找算法的实现原理,每次猜测都会排除一半的数字,非常高效。所以上面的游戏不管我心里想的是哪个数字,你在7次之内都能猜得到。


二、代码示例

#include<stdio.h>#define TRUE   1
#define FALSE  0
typedef int Status;//二分查找
//num 待查找的有序序列
//n  序列的长度
//x 待查找的元素
//返回值:找到了,返回TRUE;未找到,返回FALSE
Status binary_search(int *num,int n,int x)
{int low = 0;int high = n -1;int mid,guess;while(low<=high){mid = low + (high - low)/2;if(x < num[mid])high = mid -1;else if(x > num[mid])low = mid + 1;else{printf("找到了\n");return TRUE;}}printf("没找到\n");return FALSE;
}int main(void)
{int a[5] = {1,2,3,4,5};int b = binary_search(a,5,6);printf("%d\n",b);system("pause");//防止运行结束闪退return 0;
}

程序运行结果如下:

查找的元素6不在序列中,因此返回值为0。

大家可以自行修改测试数据进行测试。


三、算法时间复杂度

算法的时间复杂度通常用大O表示法表示,如上面的例子,二分查找算法所需要的的运行时间为   (以2为底100的对数,约为7),所以最多需要7次可以猜到。延伸到一般情况,算法复杂度为 ,通常我们记作

普通查找算法时间复杂度为:

二分查找算法时间复杂度为:

两种算法的时间复杂度对比如下:

显然二分查找算法的效率更优于普通查找算法。


总结

以上就是今天要讲的内容,本文仅仅简单介绍了二分查找算法,并通过实例让大家更好的理解该算法。

数据结构与算法——二分查找相关推荐

  1. 数据结构与算法——二分查找与二叉排序树

    文章目录 1.预备知识 1.1 题目目录 1.2 二分查找 1.3 递归二分查找 1.4 循环二分查找 1.5 二叉查找(排序)树 1.6 二叉搜索树的代码实现 2.搜索插入位置 2.1 题目描述 2 ...

  2. 数据结构与算法 | 二分查找

    假如我们在图书馆中整理书记,书按照序号有序排序,序号不连续,当我们需要从书堆中找到特定序号的书时,如果一本一本查找的话,我们可能需要查找N次.但如果我们先找到中间的书,将书分成两堆,与待查书对比,待查 ...

  3. 数据结构与算法——二分查找与二叉查找树汇总整理

    目录 预备知识:二分查找基础知识 例1:插入位置(easy) (二分查找) 例2:区间查找(medium)(二分查找) 例3:旋转数组查找(medium)(二分查找) 预备知识:二叉查找(排序)树基础 ...

  4. java 二分查找_计算机入门必备算法——二分查找法

    1.引言 笔者对于计算机的研究一直停滞不前,近期想对一些算法进行复习和进一步的研究,每天都会更新一个新的算法,算法有难有易,层层递进.不希望能学的有多么高深,只希望在一些最基本的算法上有编码的思路,或 ...

  5. 数据结构与算法学习⑤(BFS和DFS 贪心算法 二分查找)

    数据结构与算法学习⑤ 数据结构与算法学习⑤ 1.BFS和DFS 1.1.深度优先搜索算法 1.2.广度优先搜索算法 面试实战 102. 二叉树的层序遍历 104. 二叉树的最大深度 515. 在每个树 ...

  6. 数据结构与算法-查找算法(二分查找,插值查找,斐波那契(黄金分割法)查找)

    查找算法 以下三种算法的基本思想相同,都是利用递归来寻找 二分查找 思路分析 1.首先确定该数组的中间下标,min = (left + right) / 2 2.然后让需要查找的的数findVal和a ...

  7. Java数据结构与算法——线性查找 二分查找 插值查找

    1.线性查找 有一个数列: {1,8, 10, 89, 1000, 1234} ,判断数列中是否包含此名称[顺序查找] 要求: 如果找到了,就提示找到,并给出下标值. package com.szh. ...

  8. Java数据结构与算法 线性查找和二分查找

    查找 查找(searching)是在一组数据项中找到指定的目标元素(target element)或者判定组内不存在目标的过程.要查找的数据项组有事成为查找池(search pool). 在此讨论两种 ...

  9. 数据结构三大查找算法(二分查找、插值查找、斐波那契数列查找)C语言实现

    文章目录 查找 二分查找(折半查找) 插值查找 斐波拉契查找 总结: 查找 查找是在大量的信息里面寻找一个特定的信息元素 (1)静态查找和动态查找: 静态或者动态都是针对查找表而言的.动态表指查找表中 ...

最新文章

  1. centos java程序_刚得到一台centos7服务器,作为Java程序员应该做的事
  2. 系统建设或应用提供的目标或愿景性场景
  3. [别被脱库]—数据库的初恋~
  4. MainService流程
  5. VS2010附加进程调试DLL时断点无法断下的解决方法
  6. Makefile文件(四)_书写命令
  7. 视频数据训练太慢?试试UT-AustinFAIR提出的多重网格训练,加速4.5倍,还能提点!...
  8. 机器学习——数据预处理
  9. 如何使用python编程画图_【Python开发】使用python中的matplotlib进行绘图分析数据...
  10. python樱桃小丸子_appium+python自动化框架搭建
  11. linux中生成考核用的NTFS文件系统结构样例(一)
  12. IBM系统分析——领域建模
  13. Minimax算法及实例分析
  14. excel两列数据对比找不同_Excel找出不同数据
  15. QT widget宽高比
  16. 东京中文离线地图App上线
  17. Vacuum tube 真空管/电子管
  18. cf英文名字格式好看的_cf好看的英文名字格式:、I (~) you ?
  19. 关于世博会的一些遐想!
  20. 微信开发:解决IOS端下面的点击延迟问题

热门文章

  1. 优酷原生html5播放器,Youku-HTML5-Player
  2. 总结-辣鸡学长连学弟考试题都不会做
  3. 百度地图发布交通物流建设方案 共筑智慧物流新基建
  4. 开机自动连接宽带的方法
  5. 黑盒测试用例设计方法-边界值分析法
  6. 扁平化简洁工作计划安排PPT模板
  7. 2023年PMP考生|考前必练全真模拟题分享,附答案解析
  8. 传递函数波特图的画法和理解(2)
  9. 谈一下两次CSP认证从180分到380分的感想
  10. python弹幕脚本_自从用python写了个自动弹幕脚本后,各大主播都来找我,净赚十万!...