导航:首页 > 源码编译 > 二分查找算法前提必须是

二分查找算法前提必须是

发布时间:2022-12-25 06:23:47

A. 基本算法——二分查找算法

    二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。

1.条件

(1)必须采用 顺序存储结构 。

(2)必须按关键字大小有序排列。

2.步奏

(1)首先,假设表中元素是按升序排列,将表中间位置记录的 关键字 与查找关键字比较,如果两者相等,则查找成功;

(2)否则利用中间位置 记录 将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表;

(3)重复以上过程,直到找到满足条件的 记录 ,使查找成功,或直到子表不存在为止,此时查找不成功。

3.举例

    有一组元素{1,2,3,4,5,6,7,8,9},如何查到元素为3。

(1)找到数组中中间元素值5,不等于3,所以把数组分为{1,2,3,4},{5,6,7,8,9};

(2)因为5大于3,所以3在前一个数组{1,2,3,4}中查找,中间变量2,3比2大,所以在{3,4}中查询;

(3)查询到3=3,成功。

4.复杂度

     最好的情况下,1次查询成功;最坏的情况下,查询到最后两个数或者最后也查不到相等数,时间复杂度为O(log2n)。

B. 有序线性表能进行二分查找的前提是该线性表必须是()存储的填空

二分查找需要:1.确定元素之间比较大小的运算符
2.排序,3.各元素能够随机访问,也就是给出下标就能访问指定元素,而不是像链表那样只能顺序访问。这三个条件具备,就可以用二分查找。
由于你已经说了是有序线性表了,那么就差一个条件,随机访问。也就是这个线性表不能是链表的形式,而是数组形式

C. python算法:二分查找

二分查找: 又称折半查找 ,输入一个有序的元素列表(必须是有序的), 将列表中间位置记录的元素与查找元素比较, 如果查找的元素包含在列表中, 则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的元素大于查找元素,则进一步查找前一子表,否则进一步查找后一子表,重复以上过程,直到找到满足条件的记录,使查找成功, 二分查找 返回其位置; 或直到子表不存在为止,此时查找不成功 ,返回None。

二分查找算法要求 : .必须是有序列表;

二分查找算法时间复杂度: O(log n)

二分查找算法优点: 比较的次数少,查找速度快,平均性能好,占用系统内存较少。

def binary_search(list,item):

low = 0

high = len(list) - 1

while low <= high:

mid = int((low + high)/2) # 整除计算也可用 mid = (low + high)//2

guess = list[mid]

if guess == item:

return mid

if guess < item:

low = mid + 1

else:

high = mid - 1

return None

my_list = [1,3,5,6,8,7,9,12,18,45]

print (binary_search(my_list,2))

print (binary_search(my_list,12))

D. 二分查找法

二分查找法的解释如下:

二分查找法也称折半查找法,是一种在有序数组中查找某一特定元素的搜索算法。我们可以从定义可知,运用二分搜索的前提是数组必须是有序的,这里需要注意的是,我们的输入不一定是数组,也可以是数组中某一区间的起始位置和终止位置。

如果想要在数组中查找一个数,最基本的方法就是暴力解法:一次遍历,这时候时间复杂度是O(N),二分查找就是其中的一种优化,时间复杂度是O(logN);具体做法是一步一步逼近直到找到。前提是数组需要是一个排序数组。

算法要求:

1、必须采用顺序存储结构。

2、必须按关键字大小有序排列。

比较次数

计算公式:

当顺序表有n个关键字时:

查找失败时,至少比较a次关键字;查找成功时,最多比较关键字次数是b。

注意:a,b,n均为正整数。

E. 二分查找算法

前提要求数据排好序,有递归和非递归版本
int binSearch(const int *Array,int start,int end,int key)
{
int left,right;
int mid;
left=start;
right=end;
while (left<=right) { /注释中为递归算法,执行效率低,不推荐
mid=(left+right)/2;
/* if (key<Array[mid]) {
return(binSearch(Array,left,mid,key));
}
else if(key>Array[mid]){
return (binSearch(Array,mid+1,right,key));
}
else
return mid;
*/
if (key<Array[mid]) {
right=mid-1;
}
else if(key>Array[mid]){
left=mid+1;
}
else
return mid;
}
return -1;
}

F. 二分查找法适用的前提条件其查找的基本思想

适用的前提条件:1. 存储在数组中(例如一维数组)
2. 数组元素为有序(例如升序)
查找的基本思想:折半查找,设查找的元素为value
value与中间元素(middle = left + (right -left) / 2这样做的好处防止中间元素出现越界)比较,若比中间值小则查找范围在middle + 1继续查找,若比中间值大则查找范围在middle -1,若与中间值相等则查找结束索引元素为value = middle。

G. 二分搜索算法的前提条件

只需要在关键字上是有序的数组,就可以进行二分查找。

H. 二分查找算法

二分查找算法,该算法要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。如果一个序列是无序的或者是链表,那么该序列就不能使用二分查找。

二分查找算法原理:若待查序列为空,则返回-1,并退出算法;若待查序列不为空,则将它的中间元素与目标数值进行比较,判断是否相等;若相等,则返回中间元素索引,并退出算法;此时已查找成功。若不相等,则比较中间元素与目标数值的大小。

二分查找的一个技巧是:不要出现else,而是把所有情况用else,if写清楚,这样可以清楚地展现所有细节。本文都会使用else,if,旨在讲清楚,读者理解后可自行简化。

I. 二分法查找的适用条件

说”二分查找法只适用于顺序存储的有序表“是正确的,说”指线性表中的元素按值非递减排列(即从小到大,但允许相邻元素值相等)“是为了程序的确定性。
实际上只要有序就可以。按递减排序也可以用二分法。只是必须把算法规则改变一下。
递增的算法:拿要查找数值与中间序号的数值比较若相等,查找成功;要查找数值比中间序号的数值大,在右边查找,低端序号改为原中间序号加1;要查找数值比中间序号的数值小,在左边查找,高端序号改为原中间序号减1;如此反复。
递减的算法:拿要查找数值与中间序号的数值比较若相等,查找成功;要查找数值比中间序号的数值大,在左边查找,高端序号改为原中间序号减1;要查找数值比中间序号的数值小,在右边查找,低端序号改为原中间序号加1;如此反复。

J. 对线性表进行二分法查找的前提条件是什么

二分查找又称为折半查找,是一种效率较高的查找方法,其中查找的关键是要求线性表是有序表,即表中的元素按关键字有序。
例如:
int BinSearch(SeqList R,int n, KeyType k)
{
int low=0, high =n-1,mid;
while(low<=high)
{
mid =(low+high)/2;
if(R[mid].key==k)
return mid+1;
if(R[mid].key>k)
return mid-1;
else
low=mid+1;
}
return 0;
}

阅读全文

与二分查找算法前提必须是相关的资料

热点内容
移动花卡宝藏版为什么不能选免流app 浏览:255
速腾carplay怎么用安卓 浏览:13
红塔银行app怎么样 浏览:564
农行app怎么开网银 浏览:651
java迭代器遍历 浏览:303
闽政通无法请求服务器是什么 浏览:48
怎么做积木解压神器 浏览:205
王者荣耀解压玩具抽奖 浏览:49
12位是由啥加密的 浏览:870
程序员编迷你世界代码 浏览:897
php取现在时间 浏览:248
单片机高吸收 浏览:429
怎么区分五代头是不是加密喷头 浏览:246
hunt测试服务器是什么意思 浏览:510
2013程序员考试 浏览:641
毕业论文是pdf 浏览:736
服务器跑网心云划算吗 浏览:471
单片机定时器计数初值的计算公式 浏览:801
win7控制台命令 浏览:567
猫咪成年app怎么升级 浏览:692