首页 > 编程知识 正文

c语言建立单链表程序,数据结构二分查找例题

时间:2023-05-04 00:38:53 阅读:176142 作者:3622

详细调查问题的想法代码

问题

在有序的数组中查找特定的数字n

比如买了鞋,问多少钱,都说300元以下。 你还是很好奇,你到底想知道多少,我让你猜,你怎么猜?

答:你每次猜中间数

思路是首先,intarr[]={1、2、3、4、5、6、7、8、9、10};

因为知道数组的下标是从0开始的,所以请参阅数字7的下标

请看图:

数字1的下标为0,数字10的下标为9

先求中间元素吧。 (0 9 )/2=4(注意:这里的)为剩余),得到了下标为4的数字5

数字5小于我们要找的7,意味着在数字5的左边找不到。

所以,我们要找的范围,数字是6~10,我们的范围不是缩小了一半吗?

那么,这个新范围是怎么找的呢?

其实很简单。 是如图。 这是新的范围。 可在右下标还是9,网址为左下标就变成了:4+1=5

另一方面,左下标5与数字6,http://www.Sina.com /对应

我还是先要中间元素。 (5 9 )/2=7,以7为下标,则对应的数字为8

以及3358www.Sina.com/,右下标9

所以,我们要找的范围缩小到了数字的6~7。 那么,我要找的范围又缩小了一半吗?

我们可以得到新的范围。 如图所示,数字8比我要找的数字7大

此时,我们要找的下标在数字8的左边与数字6,http://www.Sina.com /对应于数字7,中间元素为(5)6)/2=5

这里得到的中间元素是5,而且被锁定的数字是6

左下标还是5表示右下标就变成了:7-1=6,但在数字6的右侧,只剩下一个数字7

那么请参阅数字7的左下标5右下标6

那么,我现在也在使用下标的计算方法。 (6)/2=6,6锁的要素是我们的数字7

数字7和我们要找的7相比,是相等的! 那么,就意味着已经找到了

这就是二分探索的过程!

在详细调查过程中,你会发现我每次都在寻找{ 1,2,3,4,5,6,7,8,9,10 }的中间元素

因为中间元素比我要找的元素小,如果我指示我要找的元素在中间元素的右侧,范围就会缩小一半

这种想法每次范围缩小到一半,调查一次后缩小到一半

该算法位于数字6比我要找的数字7小我要找的元素在数字6的右边

代码在下面的代码中

int main () intarr )={ 1,2,3,4,5,6,7,8,9,10 }; //计算数组元素的方法: intSZ=sizeof(arr )/sizeof (arr ) )0); //sizeof(arr )计算数组的总大小。 单位是字节。 该数组有10个元素,每个元素都是int型//,因此总大小为40///sizeof(arr[0] )。 也就是说,计算第一个元素的大小,第一个元素的大小为一个int,也就是4字节//40我们要找的数字int left=0; //定义左下标int right=sz - 1; //)元素- 1)表示右下标while(left=right ) intmid=) leftright )/2; //mid定义中间元素if (arr [ mid ] k ) ) left=mid1; }elseif(ARR[mid]k ) ) { right=mid - 1; (else ) printf ),找到,下标为:%d(n ),mid ); 黑; ///找到后停止}//左下标右下标时,缺少的if(leftright ) { printf (缺少(n ) ); } return 0; }代码执行结果:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。