二分查找法的原理,二分法查找是什么意思

  二分查找法的原理,二分法查找是什么意思

  在计算机科学中,二分搜索法(英文)意识门搜索(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(%d\n ,意识门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)

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: