C语言二分查找

article/2025/9/19 12:35:07

 我们常常需要对数据进行查找,修改,查找数据有许多方法,我们先看看最简单的顺序查找

 

int main()
{int i, k = 0;scanf("%d", &k);int arr[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };int sz = sizeof(arr) / sizeof(arr[0]);for (i = 0; i < sz; i++){if (arr[i] == k){printf("找到了,它是%d", arr[i]);}}return 0;
}

 顺序查找绝大多数情况有效但是由于它是一个一个元素进行查找,其效率很低,只有一个for循环所有其时间复杂度为O(n)。我们希望有一个更高效的查找方法,接下来便是二分查找,先来看看一个顺序查找和二分查找的直观比较。

       

 从上面的图中我们感受到二分查找的关键:找到最左边元素(low)和最右边元素(high),确定中间元素(mid),比较中间元素(mid)和目标元素(k)的大小,调整low和high,再确定新的mid....我们要不断确定mid直到找到k,自然需要用到循环,我们有明确的目标:找到k。因此选择while循环,找到k后循环不再进行,而当low和high之间还有元素,即low在high的左边或与之重合,k就依然可能存在,所以循环条件为low<=high,接下来的问题在于怎样调整low和high的值,mid和k比较无非就三种情况:mid<k,mid>k,mid=k。第一种情况,k在mid的右边,我们将low调整为mid+1,high不用调整;第二种情况,k在mid的左边,我们将high调整为mid-1,low不用调整。最后一种情况最简单,我们已经找到了k,直接将mid打印出来就行了,代码如下:

#include <stdio.h>
int main()
{int k = 0;scanf("%d", &k);int arr[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };int sz = sizeof(arr) / sizeof (arr[0]);int low = 0;int high = sz-1;while (low <= high){int mid = (low + high) / 2;if (arr[mid] > k){high = mid - 1;}else if (arr[mid] < k){low = mid + 1;}else{printf("找到了,它是:%d", arr[a]);break;}}if (l>r)printf("没找到,请重新输入");return 0;
}

二分查找的时间复杂度的问题:总共有n个元素,每次查找的区间大小就是n,n/2,n/4,…,n/2^k(接下来操作元素的剩余个数),其中k就是循环的次数。由于n/2^k取整后>=1,即令n/2^k=1,可得k=log2n,(是以2为底,n的对数),所以时间复杂度可以表示O(logn),确实比顺序查找快不少,但是二分查找有一个较大的局限性:只能查找有序数组的元素,即组数字必须是升序或降序。


http://chatgpt.dhexx.cn/article/MOGmFN5L.shtml

相关文章

二分查找【详解】

本期介绍&#x1f356; 主要介绍&#xff1a;二分查找的简单思路&#xff0c;为什么必须在有序的前提下才能使用二分查找&#xff0c;该怎么用C程序来实现二分查找&#xff0c;二分查找的局限性&#x1f440;。 目录&#x1f356; 简单思路前提条件编写程序总结 简单思路&…

二分答案

二分答案 总所周知&#xff0c;二分法查找一个数的时间复杂度为O(log n)&#xff0c;所以在int范围内找一个数最多只需要30余次&#xff0c;在longlong范围内最多也只需要60余次。因此&#xff0c;我们可以利用二分这一优势查找答案。即&#xff0c;每次二分后判断该数是不是满…

初探二分算法

又来算法了~~~~ &#x1f603;&#x1f603;&#x1f606;&#x1f606;&#x1f603;&#x1f603;&#x1f603;&#x1f606;&#x1f606;&#x1f606;&#x1f440;&#x1f440;&#x1f606;&#x1f914; 什么是二分算法&#xff1f; 在计算机科学中&#xff0c;二分…

二分(数学背景,边界问题,二分查找,二分答案)

二分法的数学背景 目的 关于二分法的目的&#xff0c;这里引用同济大学数学系出版的《高等数学》第七版上册中关于二分法的相关内容。&#xff08;文段内容多&#xff0c;要有一点耐心~&#xff09; 在科学技术问题中&#xff0c;经常会遇到 求解高次代数方程或其他类型的方程的…

二分模板介绍

以一个典型例题来介绍二分法的两个通用模板&#xff0c;熟练掌握这两个模板可以解决绝大部分二分的问题。 例题&#xff1a;ACWing 789.数的范围 给定一个按照升序排列的长度为n的整数数组&#xff0c;以及q个查询。 对于每个查询&#xff0c;返回一个元素k的起始位置和终止…

二分算法详细解析

二分 有单调性一定可以二分&#xff0c;可以二分不一定有单调性二分的本质是边界不是单调性(单调一定可以二分&#xff0c;不单调的有的也可以二分) 本质&#xff1a;在一个区间上&#xff0c;找到某种性质&#xff0c;每次可以将区间一分为二&#xff08;存在边界&#xff09;…

一篇文章带你搞懂二分

一篇文章教你搞懂二分 二分整数二分实数域上二分二分查找二分答案 二分 到底什么是二分呢&#xff1f;二分二分就是一分为二。简单来说二分就是在有序序列中&#xff0c;通过不断的二分&#xff0c;进而不断地缩小范围去寻找满足我们条件的解。这只是对二分一个狭义上的理解&a…

深入字节版atop: 线上系统的性能监控实践

背景 atop 是一款开源的单机性能监测工具&#xff0c;支持实时观测的同时、也支持读取历史文件排查问题。另外一个优点是除提供 CPU、MEM、DISK 等全局指标外&#xff0c;还提供进程、线程级别的各项指标监控数据。鉴于 atop 的这些优点&#xff0c;字节跳动基于社区的 atop 进…

atop备忘

atop 安装 sudo apt install atop atop 参数说明 监控界面字段说明 ATOP列&#xff1a;该列显示了主机名、信息采样日期和时间点 PRC列&#xff1a;该列显示进程整体运行情况 sys、usr字段分别指示进程在内核态和用户态的运行时间 #proc字段指示进程总数 #zombie字段指示僵…

atop linux,每天学一个 Linux 命令(117):atop

命令简介 atop 命令是一款监控 Linux 系统资源与进程的工具&#xff0c;非内部命令&#xff0c;需要安装。[rootcentos7 ~]# atop -bash: atop: command not found [rootcentos7 ~]# yum install atop -y #Debian && Ubuntu apt-get install atop #Fedora dnf install …

linux 系统性能 检测 命令 atop

atop 主要可以 监测 cpu,内存&#xff0c;硬盘&#xff0c;网络性能&#xff0c;以及 实时读写 日志。 基本用法 1.查看 atop , 实时刷新 按 a ,退出 按q 2.保存日志 atop -w log.txt 3.查看 输出日志 atop -r log.txt &#xff0c; 按 t 查看 下一个样本的性能数据 &a…

Atop使用场景

问题&#xff1a; 1、线上容器环境pod报错无法创建本地线程&#xff0c;如下图所示&#xff1a; 2、日志中出现报错信息 “fork&#xff1a;Cannot allocate memory”。如下图所示&#xff1a; 可能原因 1、内存不够 2、可能是进程数超限导致。系统内部的总进程数达到了 p…

atop工具使用

atop是linux系统下一款监控系统资源与进程的工具。atop以一定的频率记录系统的运行状态,通过它可以了解系统今生前世。atop采集系统资源「cpu、mem、disk、net」的使用情况及所有进程使用系统资源的情况,定期采集相关数据保存日志文件。可以通过atop.daily文件调整数据采集的…

atop安装和使用

atop就是一款用于监控Linux系统资源与进程的工具&#xff0c;它以一定的频率记录系统的运行状态&#xff0c;所采集的数据包含系统资源(CPU、内存、磁盘和网络)使用情况和进程运行情况&#xff0c;并能以日志文件的方式保存在磁盘中。atop是一款开源软件&#xff0c;目前最新版…

linux 之atop 系统监控工具

一、atop介绍 atop是一款用于监控Linux系统资源与进程的工具&#xff0c;它以一定的频率记录系统的运行状态&#xff0c;所采集的数据包含系统资源(CPU、内存、磁盘和网络)使用情况和进程运行情况&#xff0c;并能以日志文件的方式保存在磁盘中&#xff0c;服务器出现问题后&a…

Linux 使用 atop 监控工具

文章目录 应用场景操作步骤安装 atop配置并启动 atop编辑atop配置文件启动atop 分析atop停止atop 应用场景 atop 是一款用于监控 Linux 系统资源与进程的工具&#xff0c;以一定的频率记录系统的运行状态&#xff0c;采集系统资源&#xff08;CPU、内存、磁盘和网络&#xff0…

codeblocks中文包

kdevelop因为python 2.6.2 而不是要求的<2.6的缘故不可以显示出automake。 而删除&#xff12;.6的结果是&#xff11;&#xff13;&#xff12;个包同时要卸载&#xff0c;感觉其中不乏kde桌面的东东&#xff0c;遂放弃&#xff0c;转而投向codeblocks怀抱。 /usr/share/c…

codeblocks使用

原文来源&#xff1a;http://www.cnblogs.com/hackergodness/archive/2011/05/26/2059268.html 原手册下载&#xff1a; http://www.codeblocks.org/docs/manual_en.pdf 译者&#xff1a;JGood(http://blog.csdn.net/Jgood ) 译者言&#xff1a;工欲善其事&#xff0c;必先利其…

CodeBlocks安装及使用

Code::Blocks是一个开放源码的全功能的跨平台C/C集成开发环境&#xff0c;由纯碎的C语言开发完成&#xff0c;使用了著名的图形界面库wxWidgets。由于最近上机指导&#xff0c;学校ACM推荐同学们用的是这款软件&#xff0c;故而对其安装及使用进行一些记录。 一、Code::Blocks…

Code::Blocks介绍

软件类型&#xff1a;编程软件 软件性质&#xff1a;免费软件 操作系统&#xff1a;veket 应用平台&#xff1a;veket全系列 网站链接&#xff1a;http://www.codeblocks.org Code::Blocks 是一个开放源码的全功能的跨平台C/C集成开发环境.   相比于基于Delphi的Dev-C共享 CI…