本文收集整理关于折半查找的平均比较次数为的相关议题,使用内容导航快速到达。
内容导航:
Q1:设顺序表中有1000个元素,采用折半查找时,最大比较次数为多少次?最小比较次数为多少?要求具体算法
反复递归即可 最小当然是一次啦 最大就是不停的找呀
代码如下
import java.util.Scanner;
public class HalfSearch {
static StringBuffer bf = new StringBuffer();
static int a = 0;
static int count = 0;
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入要查找的数");
a = scanner.nextInt();
Search(0,1000);
System.out.println(bf +" "+ count);
}
public static int Search(int min , int max) {
int half = (max+min)/2;
if (a < half) {
bf.append(half).append(";");
count++;
return Search(min,half);
}
else if (a > half){
bf.append(half).append(";");
count++;
return Search(half, max);
}
else {
bf.append(half);
count++;
return a;
}
}
}
Q2:关于折半查找的比较次数。。
第五个查找1次
第二个和第七个查找两次
第一,第三和第六,第八要查找三次
第四和第九要查找四次
一共25次
ASL=25/9、查找值为21的结点,需要比较2次。
Q3:200个数折半查找,求最大比较次数
int Select(int* a,int len,int num) //num为我们要查找的数,len为数组长度,a为数组名
{
int L = 0; //设置最左右2点
int R = len-1;
int cont=0;
while(1)//没找到无线循环
{
cont++; //cont为查找的次数,如果为-1 则是没有这个数字
int m = (L+R)/2 ;
if(L>R)
return -1; //没有这个数,返回错误
if(num == a[m])
return cont; //返回找了几次
else if(num>a[m])
L = m+1; //把左边的坐标向右移动
else
R = m-1; //把右边的坐标向左移动
}
}
Q4:请教关于折半查找不成功的平均比较次数的一个小问题
8510349161219=(4*6+5*4)/(6+4)3.4.9.12.19对应的孩子就是查找不成功的,总共10个,每个的查找程度又不同,3.4.9的是4, 12.19的是5
Q5:折半查找查找26的比较次数,具体来看看!!
第一次和37比较,第二次和12比较,第三次和20比较,第四次和26比较,所以是4次