二分查找法的原理,二分法查找是什么意思
在计算机科学中,二分搜索法(英文)意识门搜索(half-interval search)也称为英文(half-interval search),对数搜索,这是一个有序的搜索过程,从数组的中间元素开始,如果中间元素是要搜索的元素,则搜索过程结束。如果某个特定元素比中间的元素大或小,则按比中间元素大或小的数组的一半进行搜索,然后与第一个元素进行比较。如果步骤数组为空,则意味着找不到它。在每次比较中,检索算法将检索范围减少一半[1]。
中文名
二分法搜索
外文名称
二进位检索
科目
计算机科学时代的复杂性
o(登录)).
空间复杂性
o(1)).
app应用
资料检索
二分法检索算法介绍
编辑
语音
给定一个包含n个值元素的数组A,或记录A0。an 1使A0.an 1,则有以下子例程来查找目标值T和T在A中的位置:
l是0,r是n1。
如果是LR,搜索以失败告终。
将m(中间元素)设置为(L R )/2。
如果自动取款机
AmT,设置r为m- 1,返回步骤2。
当Am=T时,搜索结束;返回值m。
这个迭代步骤使用两个变量继续跟踪搜索边界。在一些实际应用中,可能会在算法的末尾增加相等比较,以加快比较周期,但平均迭代次数较多[1]。
基于二分法的复杂性分析
编辑
语音
时间的复杂性
每半搜索一次将搜索区域缩小一半,时间复杂度为。(n表示集合中元素的数量)
空间复杂性。以递归的形式定义,但是最后一个递归可以重写为一个循环。
二分搜索法电码
编辑
语音
C
#包括
#定义10
usingnamespacestd
intmain())
{
inta[N]、front、end、mid、x、I;
退出
for(I=0;我
Cina[I];
退出
cinx
front=0;
end=N-1;
mid=(前端)/2;
欺骗
{
如果(a[mid])
if(a[mid]x)end=mid-1;
mid=(前端)/2;
}
if(a[mid]!=x)
Printf(未找到! n ;
其他
Printf(找到了。在物料%d)中,中间1);
0;
}
C
#包括
//递归算法
Intrecur意识门廊(int * a,intkey,intlow,inthigh)))。
{
intmid
If(低电平)。
返回-1;
Mid=(高低)/2;
if(a[mid]==key)return mid;
elseif(中键).
return recurve conscious portary(a,key,low,mid-1);
其他
return recurve conscious portion(a,调,中1,高);
}
//非递归算法
int意识之门Ary(int*a,intkey,intn)))))))))。
{
intleft=0,right=n-1,mid=0;
mid=(left right)/2;
Wile(左)
{
如果(a[mid])
左=中1;
}elseif(一个[中]键).
右=中1;
}
mid=(left right)/2;
}
if(a[mid]==key)())))))))))))))))).
回到mid;
返回-1;
}
intmain())
{
inta[]={1,2,3,4,5,6,7,8,9,12,13,45,67,89,99,101,111,123,134,565,677 };
intb[]={677,1,7,11,67 };
inti
for(I=0;我
{
//printf (%d n ,重现意识之门ary (a,b [i],0,sizeof(a)/sizeof(a[0])-1));
Printf(%dn ,意识门ary (a,b [i],sizeof(a)/sizeof(a[0]));
}
return0
}
爪哇
publicclassBinaryTest
{
Publicstaticint意识门数组(int[]array,intvalue)
{
int low=0;
in high=array . length-1;
while(低=高)
{
intmiddle=(低高)/2;
if(value==array[middle])
{
returnmiddle
}
if(valuearray[middle])
{
低=中1;
}
如果(值
{
高=中-1;
}
}
return-1;
}
publistaticvoidmain(String[]args)
{
int[]a={1,2,3,4,5,6,7,8,9 };
Intvalue=意识门ary(a,9);
System.out.println(值);
}
}
服务器端编程语言(Professional Hypertext Preprocessor的缩写)
//二分法的使用数组必须是有序的,或者升序或者降序。
$arr=array(
1,3,5,7,9,13
);
//递归调用(比较好理解。
functionbsearch_r($v,$arr,$low,$high){
If($low$high){//首先判断结束条件
return-1;
}
$ I=intval(($ high $ low)/2);
if($arr[$i]$v){
returnbsearch_r($v,$arr,$low,$ I-1);//递归
}elseif($arr[$i]
returnbsearch_r($v,$arr,$i 1,$ high);
}否则{
返回$ I;
}
}
echobsearch_r(1,$arr,0,count($ arr)-1);//0
回声
;echobsearch_r(14,$arr,0,count($ arr)-1);//-1
回声
;//while循环
函数搜索($v,$arr){
$ low=0;
$ high=count($ arr)-1;//使用下标,注意减去一
//注意凡是使用到正在…的时候,一定要防备无限循环的时候,注意终止循环的判断。
while($low=$high){//比如$low=$high,这个等于号必须有。
$ I=intval(($ high $ low)/2);
if($arr[$i]$v){
$ high=$ I-1;
}elseif($arr[$i]
$ low=$ I 1;
}否则{
返回$ I;
}
}
return-1;//找不到的时候返回-1
}
echobsearch(13美元,arr);//5
回声
;echobsearch(14美元,arr);//-1
计算机编程语言
#!/usr/自觉的大门/python
#-*-编码:utf-8-*-
defBinarySearch(array,t):
低=0
height=len(array)-1
whilelow
mid=(低高度)/2
ifarray[mid]
低=中一
elifarray[mid]t:
高度=中间一
否则:
returnarray[mid]
返回-1
if__name__==__main__ :
printBinarySearch([1,2,3,34,56,57,78,87],57)