二分法查找它是怎么计算查找次数的?比如 2 7 9 11 13 14 17 19 31 41 中查找 19这个数 具体是怎么计算次数

二分法查找它是怎么计算查找次数的?比如 2 7 9 11 13 14 17 19 31 41 中查找 19这个数 具体是怎么计算次数,第1张

一共9个数
取最中间的数(第5个),一看13,比19小,
那么再取 第5个 到 第9个数的中间。 一看是17,比19小
取第7到第9个数的中间,一看是19, ok了,查到了。
一共用了3次。
想想李咏玩的那个猜价格, 大了,小了。。。 这个就是二分法,
L=b-a是区间长度,e是要求达到的精度
次数 n=ceil[log2(L/e)] 其中ceil[]是正向取整数的意思
原来是10个数,道理相同。

这程序就是把二维数组当一维数组看,比如a[2][2],有9个元素,就看成a1[0-8]。那么所做的事情就和一维数组下的二分查找一样,只是在判断的时候,要把一维数组的下脚标还原成二维数组,对应关系如下:a1[0] = a[0][0]; a1[1] = a[0][1]; a1[2] = a[0][2];a1[3] = a[1][0]; a1[4] = a[1][1]; a1[5] = a[1][2];a1[6] = a[2][0]; a1[7] = a[2][1]; a1[8] = a[2][2];程序如下,已经devc++编译器测试通过。 #include <iostream>
using namespace std; int row = 3, col = 3; //row行,col列 int search(int a[][3], int x, int left, int right) //自定义的二维数组的二分查找
{
if(left > right) return -1;
int mid = (left + right) / 2;
int x1, y1;//把一维数组拆成二维坐标,mid是一维下脚标,x1, y1是二维数组的坐标
x1 = (mid) % col;
y1 = (mid) /col;
if(a[y1][x1] == x)
{
return mid;
}
else if (x > a[y1][x1])
{
return search(a, x, mid + 1, right);
}
else{
return search(a, x, left, mid);
}
}int main()
{
int a[3][3] = {1, 2, 3, 5, 9, 11, 13, 21, 55};
int n, x;
x = 13; //要查找的数
n = search(a, x, 0, 8);
if(n > -1)
{
int x1, y1;
x1 = n % col;
y1 = n / col;
cout << "a[" << y1 << "][" << x1 << "]=" << x << endl;
}
else
{
cout << "Not found!" << endl;
} return 0;
}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13408317.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-30
下一篇 2023-07-30

发表评论

登录后才能评论

评论列表(0条)

保存