二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
查找过程
首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
比较次数
计算公式:
当顺序表有n个关键字时:
查找失败时,至少比较a次关键字;查找成功时,最多比较关键字次数是b。
注意:a,b,n均为正整数。
算法复杂度
二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果xa[n/2],则只要在数组a的右半部搜索x.
时间复杂度无非就是while循环的次数!
总共有n个元素,
渐渐跟下去就是n,n/2,n/4,....n/2^k(接下来操作元素的剩余个数),其中k就是循环的次数
由于你n/2^k取整后>=1
即令n/2^k=1
可得k=log2n,(是以2为底,n的对数)
所以时间复杂度可以表示O(h)=O(log2n)
下面提供一段二分查找实现的伪代码:
BinarySearch(max,min,des)
mid-<(max+min)/2
while(min<=max)
mid=(min+max)/2
if mid=des then
return mid
elseif mid >des then
max=mid-1
else
min=mid+1
return max
折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。它的基本思想是:(这里假设数组元素呈升序排列)将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止;如 果xa[n/2],则我们只要在数组a的右 半部继续搜索x。
以上是二分查找算法的详细内容。更多信息请关注PHP中文网其他相关文章!

如何使用C#编写二分查找算法二分查找算法是一种高效的查找算法,它在有序数组中查找特定元素的位置,时间复杂度为O(logN)。在C#中,我们可以通过以下几个步骤来编写二分查找算法。步骤一:准备数据首先,我们需要准备一个已经排好序的数组作为查找的目标数据。假设我们要在数组中查找特定元素的位置。int[]data={1,3,5,7,9,11,13

我们知道二分查找方法是一种最适合和有效的排序算法。这个算法适用于已排序的序列。算法很简单,它只是从中间找到元素,然后将列表分成两部分,并向左子列表或右子列表移动。我们知道它的算法。现在我们将看到如何在多线程环境中使用二分查找技术。线程的数量取决于系统中存在的核心数。让我们看一下代码以了解思路。示例#include<iostream>#defineMAX16#defineMAX_THREAD4usingnamespacestd;//placearr,keyandothervariabl

如何使用Java实现二分查找算法二分查找算法是一种高效的查找方法,适用于已排序的数组。它的基本思想是不断缩小查找范围,将查找值与数组中间的元素进行比较,并根据比较结果决定继续查找左半部分还是右半部分,直到找到目标元素或查找范围缩小为空。下面我们来具体介绍如何用Java实现二分查找算法。步骤一:实现二分查找方法publicclassBinarySearch

C编程语言提供了两种搜索技术。它们如下所示:线性搜索二分搜索二分搜索这种方法只适用于有序列表。给定列表被分成两个相等的部分。给定的关键字与列表的中间元素进行比较。在这里,可能会发生三种情况,如下所示:如果中间元素与关键字匹配,则搜索将在此成功结束如果中间元素大于关键字,则搜索将在左侧分区进行。如果中间元素小于关键字,则搜索将在右侧分区进行。输入(i/p)-未排序的元素列表,关键字。输出(o/p)-成功-如果找到关键字失败-否则key=20mid=(low+high)/2程序1以下是使用二分查找在

如何使用Python实现二分查找算法?二分查找算法,也称为折半查找算法,是一种高效的查找算法。它适用于有序的数组或列表,通过将目标值与数组中间位置的元素进行比较,从而缩小查找范围。下面将介绍如何在Python中实现二分查找算法,并提供具体的代码示例。算法思路:将目标值与数组中间位置的元素进行比较;如果相等,则返回元素位置;如果目标值大于中间位置的元素,则在右

立方根是一个整数值,当它自己连续乘以自己三次时,得到原始数值。在本文中,我们将编写一个使用二分搜索来找到一个数的立方根的Java程序。找到一个数的立方根是二分搜索算法的一个应用之一。在本文中,我们将详细讨论如何使用二分搜索来计算立方根。输入-输出示例Example-1:Input:64Output:4如,64的立方根为4,输出为4。Example-2:Input:216Output:6如,216的立方根为6,输出为6。二分查找二分搜索是一种用于查找元素(即排序数组中的键)的算法。二进制算法的工作

在这个问题中,我们得到了一个有理数的排序数组。我们必须使用二分搜索算法来搜索该有理数数组的给定元素,而不使用浮点运算。有理数是以p/q形式表示的数字,其中p和q都是整数。例如,⅔、⅕。二分搜索是一种搜索技术,通过查找数组的中间来查找元素。用于查找使用二分法搜索有理数排序数组中的元素,其中不允许浮点运算。我们将比较分子和分母,以找出哪个元素更大或哪个元素是要找到的元素。示例让我们为此创建一个程序,#include<stdio.h>structRational{ &am

PHP算法解析:如何使用二分查找算法在有序数组中快速定位元素?概述:二分查找算法是一种高效的查找算法,它适用于有序数组中查找特定元素。本文将详细介绍二分查找算法的原理,并给出PHP代码示例。原理:二分查找算法通过反复将查找范围缩小一半,从而快速定位目标元素。其流程如下:首先,将查找范围缩小为数组的开头和结尾;然后,计算中间元素的索引,将其与目标元素进行比较;

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),