目录

一、 二分法概念用途

二、 超详思维图解

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

四、 总结

五、 结语

一:二分法概念用途

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

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

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

!!!接下来注意咯

二:使用思维

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

详细图解如下

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

废话不多说上代码

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  n){right = mid - 1;}else if (arr[mid]  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.完整代码:

#includeint 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  n){right = mid - 1;}else if (arr[mid]  right)printf("找不到!\n");return 0;}

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

1.对半折

2.查找中间值(mid)

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

5. 结语:

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

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