c/c++语言开发共享C语言数据结构之二分法查找详解

问题:在有序数组中查找给定元素的下标goal。在查找一个数组元素的下标,可以用循环来解决,但是如果一个数足够大,比如说手机的价格,用循环来查找,就相当于叫一个人猜,从0开始,需要猜很久。这时候就出现了

问题:在有序数组中查找给定元素的下标goal。

在查找一个数组元素的下标,可以用循环来解决,但是如果一个数足够大,比如说手机的价格,用循环来查找,就相当于叫一个人猜,从0开始,需要猜很久。这时候就出现了二分查找,也叫对半查找。

对半查找顾名思义就是猜一次,下次猜的内容就减少一半             

这时候定义一个变量left表示最左边元素的下标,在定义一个right表示最右边元素的下标,而mid就表示中间元素的下标。

当中间值小于目标值,left重新定义。

  if (mid < goal)  		{  			left = mid + 1;  		}

当中间值大于目标元素,right重新定义。

  else if (mid > goal)  		{  			right = mid - 1;  		}

当中间元素等于目标元素时,打印即可。

  else  		{  			printf("你找到了,下标为:%d", mid);  			break;  		}

这中查找方式可能会使用多次,这时候来一个while循环就可以重复查找的撒

如果最后数组元素找不到对应的元素,就在while循环外打印出找不到。

  	if (left > right)  		printf("找不到");

最后代码如下:

  #include<stdio.h>//在数组中找到某个数,二分查找  int main()  {  	int goal = 7;  	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };  	int sz = sizeof(arr) / sizeof arr[0];  	int left = 0; int right = sz - 1;  	while (left <= right)  	{  		int mid = (left + right) / 2;  		if (mid < goal)  		{  			left = mid + 1;  		}     		else if (mid > goal)  		{  			right = mid - 1;  		}  		else  		{  			printf("找到了,下标为:%d", mid);  			break;  		}  	}  	if (left > right)  		printf("找不到");  	return 0;  }

到此这篇关于c语言数据结构之二分法查找详解的文章就介绍到这了,更多相关c语言 二分法查找内容请搜索<计算机技术网(www.ctvol.com)!!>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<计算机技术网(www.ctvol.com)!!>!

需要了解更多c/c++开发分享C语言数据结构之二分法查找详解,都可以关注C/C++技术分享栏目—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/1047124.html

(0)
上一篇 2022年2月11日
下一篇 2022年2月11日

精彩推荐