算法家族之一——二分法

目录

大家好,我叫 这是我58,现在,请看下面的算法。

算法

c 复制代码
#define _CRT_SECURE_NO_WARNINGS 1//<--预处理指令
#include <stdio.h><--也是预处理指令
int main() {
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//<--在哪里查
	int i = 1;//<--需要查的数
	int right = sizeof arr / sizeof arr[0]-1;
	int left = 0;
	int mid = 0;
	while (left <= right) {
		mid = (left + right) / 2;
		if (arr[mid] < i) { left = ++mid; }
		else if (arr[mid] > i) { right = --mid; }
		else {
			printf("i(%d)在arr数组里的第%d个位置",i,mid);
			break;
		}
		if (left > right) { printf("在arr数组里,没有"i"这个数字"); }
	}
	return 0;
}

相信大家都对这个算法不陌生吧,没错!这个算法就是我们的二分法!那么,有的人可能就不相信这个算法能正确地运行起来了,现在,如果你是这些人中的其中一个的话,就先看一下下面的内容再说吧。而且,还有这个算法的流程图呢!

算法的打印效果

如果算法里的整型"i"为1

i(1)在arr数组里的第0个位置

如果算法里的整型"i"为11

在arr数组里,没有"i"这个数字

算法的流程图

是 否 是 否 在这之中有"break" 是 是 否 否 开始 定义宏"_CRT_SECURE_NO_WARNINGS"为1 导入头文件stdio.h 定义一个有十个整形的arr数组,里面初始化为{1,2,3,4,5,6,7,8,9,10} 定义整型i为你需要查找的数 定义整型right为整型数组arr的大小除以整型数组arr中的第0项 定义整型left和mid为0 把mid设为(整型left+整型right)*2的值 arr[mid]小于i? 把left设为mid加1之后的结果 arr[mid]大于i? 把right设为mid减1之后的结果 输出"i(%d)在arr数组里的第%d个位置"(第一个"%d"代入整型i,第二个"%d"代入整型mid) 结束 left大于right? 输出"在arr数组里,没有"i"这个数字" left小于等于right?

算法的实际应用

在刚才看完上面的内容后,你可能觉得这个算法只要没记牢就不知道怎么写了,但是,刚开始的确是这样的,可是在后来,你只要年复一年,日复一日地写这个算法,等到后来啊,就基本能够在没有看这个算法的时候写出这个算法了,并且,在能够在没有看这个算法的时候写出这个算法的时候,你就可以更方便地做下面的三件小事了。

  1. 用来求方程的近似值,就比如在公式" f ( x ) = l n ( x ) + 2 x − 6 f(x)=ln(x)+2x-6 f(x)=ln(x)+2x−6"中,只用了4次二分法就精确到了0.1。[1](#1)[2](#2)
  2. 用来更快速地修好电路、水管、气管(只要用几次二分法,就能精准地查找并修好电路、水管或者气管的故障了)。[2](#2)
  3. 用来更快地找出次品,就比如在12个从外表上来看几乎一模一样的球中,有一个次品球,这个次品球比其他球略轻,而只要用几次二分法,就可以较快 地用天平找出那个次品球。[3](#3)[2](#2)

总结

在看完这篇博客之后,我想你应该爱上了算法家族之一------二分法了吧。那么,如果你喜欢上了算法家族之一------二分法的话,可以评论或者投票来互动一下我哦。


  1. 选自搜狗问问中的名叫"用二分法求函数f(x)=lnx+2x-6在区间(2,3)零点近似值,至少经过(  )次二分后精确度达到0.1.A.2"的问题 ↩︎

  2. ↩︎ ↩︎ ↩︎

  3. 选自百度文库中的其中一篇"二分法在生活中的应用." ↩︎

相关推荐
黑客思维者42 分钟前
《我是如何用C语言写工控系统的漏洞和Bug》连载(1)内容大纲
c语言·bug·工控漏洞
j_xxx404_1 小时前
数据结构:栈和队列力扣算法题
c语言·数据结构·算法·leetcode·链表
南莺莺1 小时前
假设一个算术表达式中包含圆括号、方括号和花括号3种类型的括号,编写一个算法来判别,表达式中的括号是否配对,以字符“\0“作为算术表达式的结束符
c语言·数据结构·算法·
THMAIL1 小时前
深度学习从入门到精通 - 神经网络核心原理:从生物神经元到数学模型蜕变
人工智能·python·深度学习·神经网络·算法·机器学习·逻辑回归
野犬寒鸦1 小时前
力扣hot100:旋转图像(48)(详细图解以及核心思路剖析)
java·数据结构·后端·算法·leetcode
墨染点香1 小时前
LeetCode 刷题【61. 旋转链表】
算法·leetcode·职场和发展
一枝小雨2 小时前
【OJ】C++ vector类OJ题
数据结构·c++·算法·leetcode·oj题
Tisfy2 小时前
LeetCode 3516.找到最近的人:计算绝对值大小
数学·算法·leetcode·题解
自信的小螺丝钉2 小时前
Leetcode 206. 反转链表 迭代/递归
算法·leetcode·链表
buyutang_2 小时前
C/C++ Linux系统编程:线程控制详解,从线程创建到线程终止
linux·c语言·c++·学习