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

考研数据结构——C语言实现折半查找

首先定义了一个有序数组a,然后计算出数组的长度n。接着定义了一个要查找的元素x,值为79。binarySearch函数实现了二分查找算法,它接受数组、左右边界和目标值作为参数,通过不断缩小搜索范围来查找目标值。如果找到了目标值,函数返回其在数组中的索引;如果没有找到,返回-1。

main函数中,定义了数组的左右边界,并调用binarySearch函数进行查找。根据返回的结果,使用printf函数打印出目标值在数组中的索引或者提示信息。最后,程序正常结束,返回0。

函数binarySearch实现了二分查找算法。它接收四个参数:数组arr,搜索范围的左右边界lr,以及要查找的目标值x。函数的工作原理如下:

  • 使用while循环,只要左边界l小于右边界r,就继续查找。
  • 计算中间位置mid,这是通过取lr的平均值来实现的,使用l + (r - l) / 2的写法可以防止在计算l + r时发生整数溢出。
  • 如果目标值x大于中间位置的值arr[mid],则将左边界l更新为mid + 1,缩小搜索范围到右半部分。
  • 如果目标值x小于中间位置的值arr[mid],则将右边界r更新为mid,缩小搜索范围到左半部分。
  • 如果找到目标值x,则返回当前的中间位置mid作为元素的索引。
  • 如果循环结束都没有找到目标值,则返回-1,表示元素不在数组中。
#include <stdio.h>int a[] = { 1, 3, 4, 4, 6, 17, 79, 81, 90 }; // 修正数组初始化
int n = sizeof(a) / sizeof(a[0]); // 计算数组元素数量
int x = 79;// 二分查找函数
int binarySearch(int arr[], int l, int r, int x) {while (l < r) {int mid = l + (r - l) / 2; // 防止溢出的写法if (x > arr[mid]) {l = mid + 1;}else if (x < arr[mid]) {r = mid;}else {return mid; // 找到元素,返回索引}}return -1; // 未找到元素,返回-1
}int main() {int left = 0, right = n - 1, result;result = binarySearch(a, left, right, x);if (result != -1) {printf("元素 %d 在数组中的索引是 %d。\n", x, result);}else {printf("数组中没有元素 %d。\n", x);}return 0;
}

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

相关文章:

  • 【游戏引擎】C++自制游戏引擎 Lunar Game Engine
  • 使用【Sa-Token】实现Http Basic 认证
  • layui table中的checkbox禁用问题
  • 102.SAPUI5 sap.ndc.BarcodeScannerButton调用摄像头时,localhost访问正常,使用IP访问失败
  • 20240923软考架构-------软考186-190答案解析
  • 基于Spring Boot的宠物咖啡馆平台【附源码】
  • C++模拟实现list:list、list类的初始化和尾插、list的迭代器的基本实现、list的完整实现、测试、整个list类等的介绍
  • Offer60:n个骰子的点数
  • 几种常见的索引类型扫描
  • 苹果CMS插件:优化蜘蛛访问内容,提升百度收录率
  • 后端开发刷题 | 没有重复项数字的全排列
  • Python中的“打开与关闭文件”:从入门到精通
  • 9.23 My_string.cpp
  • 【android10】【binder】【3.向servicemanager注册服务】
  • Java — LeetCode 面试经典150题(一)
  • Python酷玩之旅_mysql-connector
  • 7.搭建个人金融数据库之快速获取股票列表和基本信息!
  • Nginx基础详解1(单体部署与集群部署、负载均衡、正反代理、nginx安装)
  • 等保一体机如何帮你应对网络攻击
  • CVE-2024-1112 Resource Hacker 缓冲区溢出分析
  • WebGL渲染与创建2D内容
  • ArcGIS Desktop使用入门(三)图层右键工具——拓扑(下篇:地理数据库拓扑)
  • LeetCode题练习与总结:二叉树的最近公共祖先--236
  • uni-app 多环境配置
  • 【d48】【Java】【力扣】LCR 123. 图书整理 I
  • 【MySQL】InnoDB 索引为什么使用B+树而不用跳表?
  • 【学习笔记】TLS/SSL握手之Records
  • 【MySQL】创建新账号新数据库并授权
  • Nginx反向代理简介,作用及配置;Nginx负载均衡简介,作用及配置;
  • SAP MIGO M7146不支持移动原因