当前位置: 首页 > news >正文

牛刀小试---二分查找(C语言)

题目:在给定的升序数组中查找指定的数字n,并输出其下标

代码举例:

#include <stdio.h>
int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9,10 };//给定的升序数组int left = 0;//定义左下标int right = sizeof(arr) / sizeof(arr[0]) - 1;//定义右下标int key = 7;//要找的数字int mid = 0;//记录中间元素的下标int find = 0;//定义真假,用与判断输出while (left <= right){mid = (left + right) / 2;//表示中间元素的下标if (arr[mid] > key)//中间下标所在元素大于要找的数字{right = mid - 1;//则右下标改变}else if (arr[mid] < key)//中间下标所在元素小于要找的数字{left = mid + 1;//则左下标改变}else//中间下标所在元素就是要找的数字{find = 1;//真,找到了break;//跳出循环}}//输出if (1 == find)printf("找到了,下标是%d\n", mid);elseprintf("找不到\n");return 0;
}

运行结果:

题目解析:

1. 明确概念:

二分查找,也叫折半查找,是一种在有序数组中查找特定元素的算法。它通过比较中间元素和目标值的大小,将查找范围缩小为一半,直到找到目标元素或者查找范围为空。

2. 知其原理(步骤)

 1. 确定搜索范围:首先,需要确定要在哪个区间内进行查找。这可以通过比较目标值与中间元素的大小来确定。如果目标值小于中间元素,则可以确定目标值只可能存在于前半部分;如果目标值大于中间元素,则可以确定目标值只可能存在于后半部分;如果目标值等于中间元素,则可以直接找到目标值。


 2.划分区间:根据目标值与中间元素的比较结果,可以将搜索范围划分为两个子区间。如果目标值小于中间元素,则将搜索范围缩小为前半部分;如果目标值大于中间元素,则将搜索范围缩小为后半部分。

 3.在确定了新的搜索范围后,重复步骤1,2,直到找到目标值。

3. 思路方法:

知道其原理,将其转化为代码,通过定义左右下标,确定搜索范围,通过定义中间元素下标,确定中间元素,通过定义变量key表示所找目标值,通过定义变量flag,用于判断输出;比较目标值与中间元素的大小,根据目标值与中间元素的比较结果,通过左右下标的改变,缩小搜索范围,通过while循环实现重复;最后通过变量flag进行判断输出。

结言:本文将一维数组的使用与循环相结合,实现二分查找,进一步巩固数组和循环相关知识。

http://www.lryc.cn/news/280445.html

相关文章:

  • k8s-数据卷
  • Linux学习记录——사십삼 高级IO(4)--- Epoll型服务器
  • 6.4、SDN在云数据中心的应用案例分析
  • SpringBoot整合ES
  • Pandas实战100例 | 案例 10: 应用函数 - 使用 `apply`
  • 《C++大学教程》4.13汽油哩数
  • OpenGL排坑指南—贴图纹理绑定和使用
  • Electron中 主进程(Main Process)与 渲染进程 (Renderer Process) 通信的方式
  • 企业微信forMAC,如何左右翻动预览图片
  • Android Firebase (FCM)推送接入
  • Neo4j恢复
  • ZZULIOJ 1114: 逆序
  • Linux前后端项目部署
  • GPT-4与DALL·E 3:跨界融合,开启绘画与文本的新纪元
  • 聊聊PowerJob的Alarmable
  • 系列三十五、获取Excel中的总记录数
  • VMware workstation安装debian-12.1.0虚拟机并配置网络
  • centos下系统全局检测工具dstat使用
  • 无人机群ros通信
  • LeetCode刷题:142. 环形链表 II
  • Laravel 使用rdkafka_laravel详细教程(实操避坑)
  • 439 - Knight Moves (UVA)
  • 数据结构(c)冒泡排序
  • 并发编程之并发容器
  • K8s---存储卷(动态pv和pvc)
  • JS判断对象是否为空对象的几种方法
  • 算法通关村第十五关—用4KB内存寻找重复元素(青铜)
  • 【PHP】判断字符串是否是有效的base64编码
  • 鼎盛合|测量精度SOC芯片开发中的技术问题整理
  • sql | 学生参加各科考试次数