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

文章浏览阅读1.5w次,点赞122次,收藏194次。二分法往简单明了就三个步骤:1.对半折2.查找中间值(mid)3.缩小区间(看与mid的关系再决定,往左+1或者往右-1)_二分法查找

目录

一、 二分法概念用途

二、 超详思维图解

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

四、   总结

五、   结语

一:二分法概念用途

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

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

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

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

!!!接下来注意咯

二:使用思维

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

详细图解如下

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

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

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

废话不多说上代码

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.   结语:

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/78771.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注