超详解“二分法查找”,一看就会!

这篇具有很好参考价值的文章主要介绍了超详解“二分法查找”,一看就会!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、 二分法概念用途

二、 超详思维图解

三、  超详使用方法实现代码运行操作

四、   总结

五、   结语

一:二分法概念用途

 什么是二分法?有什么作用?一般用在何处?

概念:二分查找法算法,也叫折半查找算法(对半处理会提高寻找目标数字的效率);

作用:在一串有序的数字中,能快速寻找到你输入的数字,是一种很高效的查询算法。注意!!使用二分查找要求数组数据必须采用顺序存储结构有序排列。

二分法,C语言,c语言

!!!接下来注意咯

二:使用思维

思维:首先找出这串有序数字的中间值,每次都跟区间的中间值进行对比,将查找的区间缩小成之前的一半,进行二次与中间值对比,再次将查找的区间缩小到之前的一半,直到找到你要查找的元素为止,是不是很简单呢?实质就一个这么简单的思维。

详细图解如下

二分法,C语言,c语言 

二分法,C语言,c语言

三:使用方法实现代码运行操作

废话不多说上代码

1.定义变量

	int arr[] = { 1,2,3,4,5,6,7,8,9,10,11 };
	int n = 0;
	int sz = sizeof(arr) / size(arr[0]);
	int left = 0;
	int right = sz - 1;

    int arr[] = { 1,2,3,4,5,6,7,8,9,10,11 };  用数组表示这组有序数字
    int n = 0;                                            定义即将寻找数数的变量
    int sz = sizeof(arr) / size(arr[0]);        元素的个数(  sz后面单独解释)
    int left = 0;                                         区间最左边的数字
    int right = sz - 1;                                区间最右边的数字

    int mid = (left + right) / 2;                   定义一个中间值,中间值=(最左边加最右边)÷ 2

    int  sz = sizeof(arr) / size(arr[0]);的单独解解释: 

!!sizeof  求空间大小用的

记公式!!! sizeof= 类型元素所占字节数  ×  元素个数

se是int 类型,一个元素占四个字节,那sizeof (arr) 内有11个元素,所以sizeof(arr)  共占44个字节

                                                                                                                                      4×11=44

                                                               sizeof(arr[ 0])内有一个元素,所以size(arr[0])共占4字节

                                                                                                                                       4×1=4

        所以 sz = sizeof(arr) / size(arr[0])=  44÷  4  =11;

2.

while (left <= right)
	{
		if (arr[mid] > n)
		{
			right = mid - 1;
		}
		else if (arr[mid] < n)
		{
			left = mid + 1;
		}
		else
		{
			printf("找到了,下标是: %d\n", mid);
			break;
		}
	}
	if(left > right)
	    printf("找不到!\n");

   if分支表达多种情况???

        中间值mid > 要查找的数,最右边的值right-1,缩小区间范围便于下一次查找

        中间值mid < 要查找的数,最左边的值left+1,缩小区间范围便于下一次查找

        中间值mid = 要查找的数,恭喜你,找到了!!

        if   (left > right)      (查找的数不在数组元素之内,就找不到)
            printf("找不到!\n");

while  循环语句???

       a.    因为查找不是一次就能找到,所以加个while 循环语句可以多查找几次,直到找到为止,                break直接跳出循环;

        b.    while语句的条件

                  while (left <= right),left本身是最左数,right本身是最右数,所以一般情况下left<right,中间值就存在。

还有一种情况就是·left=right=mid,最左值等于最右值也就是最后的中间值,此时恭喜你,已找到目标。

               if(left > right),  如果left>right,说明此元素不存在你的查找范围内,因此找不到。

3.    完整代码:

#include<stdio.h>
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10,11 };
	int n = 0;
	int sz = sizeof(arr) / size(arr[0]);
	int left = 0;
	int right = sz - 1;
	scanf("%d", &n);
	int mid = (left + right) / 2;
	while (left <= right)
	{
		if (arr[mid] > n)
		{
			right = mid - 1;
		}
		else if (arr[mid] < n)
		{
			left = mid + 1;
		}
		else
		{
			printf("找到了,下标是: %d\n", mid);
			break;
		}
	}
	if(left > right)
	    printf("找不到!\n");
	return 0;
}

4.   总结:二分法往简单里看就是三个步骤:

                                                                   1.    对半折

                                                                   2.     查找中间值( mid)

                                                                   3.     缩小区间(看与mid的关系再决定,往左+1或者往                                                                                                                                                  右-1)

5.   结语:

这是我第一次写博客,希望此文能够帮助到你,如有不足之处,望君留言。

如果本文对你有所帮助,记得点赞关注哟!笔者会持续更新干货,期待与君共勉!!

    二分法,C语言,c语言                                                             文章来源地址https://www.toymoban.com/news/detail-727936.html

到了这里,关于超详解“二分法查找”,一看就会!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【算法】—二分法详解

    ①定义: 二分查找算法也称折半搜索算法,对数搜索算法,是一种在 有序数组 中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素

    2024年02月09日
    浏览(52)
  • 初阶算法(3):二分法的讲解与实现(C语言),以及二分不止光在有序数组中的应用

     第一章 初阶算法(1):通过简单的排序算法来认识时间复杂度  第二章 初阶算法(2):进行详细地介绍插入排序的细节和时间复杂度  第三章 初阶算法(3):二分法的讲解与实现,以及二分不止光在有序数组中的应用 目录 系列文章目录 前言 一、二分法的讲解与实现

    2024年02月14日
    浏览(44)
  • C初阶必写的C语言小游戏—扫雷,一看就会,看完就能写

    人尽皆知的扫雷小游戏,原理简单,写法也简单,我会通过C语言分各个部分将这个小游戏进行剖析,一看就会! 我们需要新建一个头文件game.h,两个源文件game.c和text.c,一共三个文件 他们的关系是这样的: test.c是主体,是游戏的测试逻辑 game.c是游戏的实现逻辑 game.h是实现

    2024年02月05日
    浏览(41)
  • upload-labs详解1-19关通关全解(最全最详细一看就会)

    upload-labs是一个使用php语言编写的,专门收集渗透测试过程中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共19关,每一关都包含着不同上传方式。 1.png: 选择一个php文件,发现无法上传。 查看提示说是使用js对不合法文件进行检查,看到是

    2024年02月06日
    浏览(89)
  • 二分法MATLAB代码

    本质是通过不断进行区间压缩来获取函数零点。 二分法的终止条件:区间长度小于等于精度要求 。 流程: 如下图所示:

    2024年02月05日
    浏览(46)
  • 二分法相关使用

    在线OJ:704. 二分查找 有序数组下的二分思路如下: 由于这里是有序数组, 我们可以可以先得到中点位置, 中点可以把数组分为左右两边; 如果中点位置的值等于目标值, 直接返回中点位置; 如果中点位置的值小于目标值, 则去数组中点左侧按同样的方式查找; 如果中点位置的值大

    2024年02月07日
    浏览(43)
  • 二分法简单题

    2024年01月24日
    浏览(55)
  • 初探二分法

    智能化校园:深入探讨云端管理系统设计与实现(一) 智能化校园:深入探讨云端管理系统设计与实现(二) 题目:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 提示: 你可以

    2024年01月25日
    浏览(59)
  • 【剑指Offer】二分法例题

    链表是数据结构中重要的一个章节,他的重要性也不言而喻,在未来不管是笔试还是面试都会遇到这类的题目,所以接下来我就会把一些链表的常考的题目全部整理出来供大家学习指正。 题目链接 描述: 给定一个长度为n的数组nums,请你找到峰值并返回其索引。数组可能包

    2023年04月13日
    浏览(45)
  • 非线性方程二分法

    优点:算法直观、简单、总能保证收敛;局限:收敛速度慢、一般不单独用它求根,仅为了获取根的粗略近似 设 f ( x ) f(x) f ( x ) 在 [ a , b ] [a,b] [ a , b ] 上连续、严格单调、满足条件 f ( a ) f ( b ) 0 f(a)f(b)0 f ( a ) f ( b ) 0 则在区间 [ a , b ] [a,b] [ a , b ] 内必有一根 x ∗ x^* x ∗ 。通

    2024年02月04日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包