二分查找法的具体算法

如题所述

折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。它的基本思想是,将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如果x<a[n/2],则我们只要在数组a的左半部继续搜索x(这里假设数组元素呈升序排列)。如果x>a[n/2],则我们只要在数组a的右半部继续搜索x。二分搜索法的应用极其广泛,而且它的思想易于理解,但是要写一个正确的二分搜索算法也不是一件简单的事。第一个二分搜索算法早在1946年就出现了,但是第一个完全正确的二分搜索算法直到1962年才出现。Bentley在他的著作《Writing Correct Programs》中写道,90%的计算机专家不能在2小时内写出完全正确的二分搜索算法。问题的关键在于准确地制定各次查找范围的边界以及终止条件的确定,正确地归纳奇偶数的各种情况,其实整理后可以发现它的具体算法是很直观的,我们可用C++描述如下:

template<class Type>

int BinarySearch(Type a[],const Type& x,int n)

{

int left=0;

int right=n-1;

while(left<=right){

int middle=(left+right)/2;

if (x==a[middle]) return middle;

if (x>a[middle]) left=middle+1;

else right=middle-1;

}

return -1;

}

模板函数BinarySearch在a[0]<=a[1]<=...<=a[n-1]共n个升序排列的元素中搜索x,找到x时返回其在数组中的位置,否则返回-1。容易看出,每执行一次while循环,待搜索数组的大小减少一半,因此整个算法在最坏情况下的时间复杂度为O(log n)。在数据量很大的时候,它的线性查找在时间复杂度上的优劣一目了然。
温馨提示:内容为网友见解,仅供参考
第1个回答  2020-12-23

二分查找法的具体算法
折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。它的基本思想是,将n个元素分成个数大致相同的两半,取a[n\/2]与欲查找的x作比较,如果x=a[n\/2]则找到x,算法终止。如果xa[n\/2],则我们只要在数组a的右半部继续搜索x...

二分法查找数据算法思想
当处理大规模数据时,二分法查找算法显得尤为高效。它的核心思想是基于数据的有序性。在二分查找中,前提是数据必须是已按照升序或降序排列的。具体操作步骤如下:首先,选取数据的中间位置进行比较。如果目标值x正好等于中间位置的值,那么查找就成功了。如果x小于中间值,那么搜索范围会缩小到前半部分,继...

二分法具体是怎么计算的呢?
C++语言中的二分查找法:算法:当数据量很大适宜采用该方法。采用二分法查找时,数据需是排好序的。基本思想:假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段中查找;若x大于当前位置值则在数列的后半段中继续...

查找算法的二分查找
【算法复杂度】假设其数组长度为n,其算法复杂度为o(log(n))下面提供一段二分查找实现的伪代码:BinarySearch(max,min,des)mid-des thenmax=mid-1elsemin=mid+1return max折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。

什么是二分法
二分法是一种搜索算法。二分法,也称为二分查找或折半查找,是一种在有序数组中查找某一特定元素的搜索算法。其原理是将待搜索的数据范围不断缩小,通过每次比较中间元素来缩小查找范围,直至找到目标元素或确定目标元素不存在于数组中。这种方法的效率较高,适用于大量数据的查找。详细解释如下:二分法的...

二分法查找平均查找几次
则需用第1个数和被查找的数比较,要比较1次。被查找的数是第2个数,则需用第1个数、第2个数和被查找的数比较,要比较2次。...被查找的数是第n个数,则需用第1个数、第2个数、...、第n个数和被查找的数比较,要比较n次。平均次数为(1+2+...+n)\/n=(n+1)\/2。

算法03 二分查找算法【C++实现】
二分查找,又称为折半查找,是一种在有序数组中查找特定元素的高效算法。它的核心思想在于每次查找时,将数组分割为两部分,比较中间元素与目标值,然后在与目标值接近的半个数组中继续查找。这一过程通过递减数组范围来实现,直到找到目标值或范围缩小至无法继续分割为止。使用自定义函数的方法,二分查找...

一个运用二分查找算法的程序的时间复杂度是
2.二分查找算法的步骤 首先,确定查找范围的起始和结束位置,通常为数组的第一个和最后一个元素。然后,计算中间位置,比较中间位置的元素与目标值的大小关系,若相等则找到目标值,结束查找。若目标值较小,则将查找范围缩小为前半部分,否则缩小为后半部分,重复上述过程直到找到目标值或查找范围为空。...

二分查找算法
二分查找算法,该算法要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。如果一个序列是无序的或者是链表,那么该序列就不能使用二分查找。二分查找算法原理:若待查序列为空,则返回-1,并退出算法;若待查序列不为空,则将它的中间元素与目标数值进行比较,判断是否相等;若相等,则返回...

二分法查找的介绍
算法:当数据量很大适宜采用该方法。采用二分法查找时,数据需是排好序的。主要思想是:(设查找的数组区间为array[low, high])(1)确定该期间的中间位置K(2)将查找的值T与array[k]比较。若相等,查找成功返回此位置;否则确定新的查找区域,继续二分查找。区域确定如下:a.array[k]>T 由数组...

相似回答