C语言数据结构之二分法查找详解

 更新时间:2022年02月10日 15:49:52   作者:诚挚的乔治  
二分查找算法是在有序数组中用到的较为频繁的一种算法,在未接触二分查找算法时,最通用的一种做法是,对数组进行遍历,跟每个元素进行比较,其时间为O(n),但二分查找算法更优

问题:在有序数组中查找给定元素的下标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语言 二分法查找内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • CMakeList中自动编译protobuf文件过程

    CMakeList中自动编译protobuf文件过程

    这篇文章主要介绍了CMakeList中自动编译protobuf文件过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Qt中QScrollArea控件的实现

    Qt中QScrollArea控件的实现

    QScrollArea是Qt框架中用于提供一个滚动条区域,允许用户滚动查看比当前可视区域更大的内容的控件,本文主要介绍了Qt中QScrollArea控件的实现,感兴趣的可以了解一下
    2025-04-04
  • C++、Qt分别读写xml文件的方法实例

    C++、Qt分别读写xml文件的方法实例

    Qt提供了QDomElement 类用于完成对xml文件的读取和写入,这篇文章主要给大家介绍了关于C++、Qt分别读写xml文件的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-03-03
  • opencv摄像头捕获识别颜色

    opencv摄像头捕获识别颜色

    这篇文章主要介绍了opencv摄像头捕获识别颜色,用opencv通过摄像头捕获识别颜色,红色蓝色等,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • vs2019中使用MFC构建简单windows窗口程序

    vs2019中使用MFC构建简单windows窗口程序

    今天发现网上好多MFC代码都不能用,给大家分享一个简单的MFC窗口语言,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • C语言跳转浏览器打开指定URL的操作代码

    C语言跳转浏览器打开指定URL的操作代码

    这篇文章主要介绍了C语言跳转浏览器打开指定URL,该代码使用sprintf()函数将要打开的URL添加到一个系统命令中,然后使用system()函数调用该命令以默认浏览器打开URL,需要的朋友可以参考下
    2023-04-04
  • VC定制个性化的MessageBox解决方法

    VC定制个性化的MessageBox解决方法

    这篇文章主要介绍了VC定制个性化的MessageBox解决方法,有助于进一步的了解windows应用程序的消息机制及运行原理,需要的朋友可以参考下
    2014-07-07
  • C++通过文件指针获取文件大小的方法实现

    C++通过文件指针获取文件大小的方法实现

    本文主要介绍了C++通过文件指针获取文件大小的方法实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • C++中Qt的安装与配置步骤详解

    C++中Qt的安装与配置步骤详解

    Qt是一种C++编程框架,用于构建图形用户界面(GUI)应用程序和嵌入式系统,无论是初学者还是经验丰富的开发者,Qt都为构建高质量、可维护的应用程序提供了丰富的工具和支持,本文主要给大家介绍了C++中Qt的安装与配置步骤,需要的朋友可以参考下
    2023-12-12
  • 关于《C和指针》的学习笔记

    关于《C和指针》的学习笔记

    本篇文章是对《C和指针》这本书的学习做了笔记介绍。需要的朋友参考下
    2013-05-05

最新评论