算法思想:用左下标和右下标之和除二得出中间下标值,再通过与所求元素比较,缩小范围,最后实现左下右下标相等,即找出所求下标。代码实现如下:

#include <stdio.h>
int main()
{int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };int sz = sizeof(arr) / sizeof(arr[0]); //元素个数int left = 0;int right = sz-1;int mid = 0;int k = 7; //要查找的元素  可自行替换int flag = 0; //找不到 while (left<=right){mid = (left + right) / 2;if (arr[mid] < k){left = mid + 1;}else if (arr[mid] > k){right = mid - 1;}else{flag = 1;break;}}if (flag == 1)printf("找到了,下标是:%d\n", mid);elseprintf("找不到\n");}

2.函数方法实现,思路大致一致,在main函数中调用 binart_search 二分查找函数 。

代码实现如下:

int binary_search(int arr[], int k, int sz)
{int left = 0;int right = sz - 1;while (left <= right){int mid = (left + right) / 2;if (arr[mid] < k){left = mid + 1;}else if (arr[mid] > k){right = mid - 1;}else{return mid;}}return -1;
}
int main()
{int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };int k = 5;int sz = sizeof(arr) / sizeof(arr[0]);//找到了,返回下标//找不到,返回-1int ret=binary_search(arr, k, sz);  //TDD - 测试驱动开发 (明确任务,进行开发)if (ret == -1)printf("找不到\n");elseprintf("找到了,下表是:%d\n", ret);return 0;
}

将binary_search(arr, k, sz) sz换成想要求解的范围,即可实现在特定范围内查找

binary_search函数内换成: int binary_search(int arr[], int k, int left, int right)

main函数内换成:int ret = binary_search(arr, k, 5, 9) ----在左下标为5和右下标为9的元素直接找元素k,后面又打印出k的下标mid 。

C语言题解:用二分法思想求解10个元素中某个元素的下标(包含函数方法)相关推荐

  1. C语言学习之输出10个整数中的最大值及其下标、最小值及其下标

    1.试编程从键盘输入10个整数并保存到数组,输出10个整数中的最大值及其下标.最小值及其下标. #include <stdio.h> void main(){int a[10],i;int ...

  2. 【javascript基础——系列10】js中隐藏元素的几种方法以及代码

    系列文章 [javascript基础--系列1]前端页面ajax连接后台服务器传输数据 [javascript基础--系列2]前端页面axios连接后台服务器传输数据 [javascript基础--系 ...

  3. 一个c语言源程序至少包括哪些内容,一个c源程序中至少应包括一个什么函数_后端开发...

    PHP如何将PNG转换成JPG?_后端开发 PHP将PNG转换成JPG的方法:首先获取要转为JPG的PNG图片路径:然后通过"imagecreatefrompng()"函数,并根据 ...

  4. debian linux系统下载工具,在Debian 10 Linux系统中下载安装R和RStudio的方法

    本文教你在Debian 10(Buster) Linux服务器/台式机操作系统中轻松安装R和RStudio. 简介 R是一种通常用于统计计算和数据图形表示的编程语言.另一方面,Rstudio是R的集成 ...

  5. C语言switch为什么不执行,求解,为什么switch中的语句不执行?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include #define bjys 0 #define qjys WHITE #define maxbox 7 ...

  6. Java实现二分法(折半)查找数组中的元素

    二分查找 算法思想:又叫折半查找,要求待查找的序列有序.每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分 ...

  7. C语言使用找出二维数组所有元素中的最大值,下标

    求二维数组的MAX值及下标 在这里我使用3行二列方便做题,仅供参考. 运行结果 代码如下 #include<stdio.h> #define N 3 #define M 2 int T(i ...

  8. C语言编程>第七周 ⑧ 请编一个函数void fun(int a[M][N],int b[N]),c指向一个M行N列的二维数组,求出二维数组每列中最大元素,并依次放入b所指一维数组中。

    例题:请编一个函数void fun(int a[M][N],int b[N]),c指向一个M行N列的二维数组,求出二维数组每列中最大元素,并依次放入b所指一维数组中.二维数组中的数己在主函数中赋予. ...

  9. 《C语言程序设计:问题与求解方法》——3.9节常见编程错误

    本节书摘来自华章社区<C语言程序设计:问题与求解方法>一书中的第3章,第3.9节常见编程错误,作者:何 勤,更多章节内容可以访问云栖社区"华章社区"公众号查看 3.9 ...

最新文章

  1. linux mint 19 与windows时间不同步
  2. 收集:搜罗或看到的搞笑桥段
  3. adsafe for linux,新闻|关于网站广告和过滤器的那些事
  4. 详解:面向对象与面向过程的比较 类之间的关系:泛化、实现、依赖、关联、聚合、组合
  5. Go三种方式创建赋值map
  6. CodeForces - 1303D Fill The Bag(贪心+模拟)
  7. [SoapUI] Jenkins 配置不同环境(TP, LIVE)
  8. C#设计模式(19)——状态者模式(State Pattern)
  9. 基于sigmoid的文本多标签分类模型代码实现
  10. ES11新特性_私有属性---JavaScript_ECMAScript_ES6-ES11新特性工作笔记061
  11. 使用Freetype发现的问题记录
  12. 图片垂直居中 和 float
  13. RK3399驱动开发 | 09 - 基于RK808 PMIC的电源管理驱动
  14. 树莓派sd卡linux分区,树莓派安装了Kali系统的SD卡扩容问题(分区太小)解决办法...
  15. php strpos 编码问题,PHP代码审计04之strpos函数使用不当
  16. 【财富空间】幸福,就是有这3种能力
  17. Balsamiq Mockups 入门教程
  18. 机器学习入门系列05,Classification: Probabilistic Generative Model(分类:概率生成模型)
  19. pytorch保存模型方法
  20. C语言转义字符,注释

热门文章

  1. 必看干货:如何在 JavaScript 中实现 8 种基本图形算法
  2. 深度学习实现缺陷检测
  3. 2021新款 iPad,包邮送一个!10月25日截止
  4. 【学术相关】什么是核心期刊?国家级期刊、省级期刊、国际级期刊又是啥?...
  5. 人脸识别:insightface自定义数据集制作 | 附练手数据集
  6. 栈与队列8——求最大子矩阵的大小
  7. Mysql 查看连接数,状态 最大并发数 怎么设置才合理
  8. 学习OpenGL ES之透明和混合
  9. 背水一战 Windows 10 (65) - 控件(WebView): 对 WebView 中的内容截图, 通过 Share Contract 分享 WebView 中的被选中的内容...
  10. IT运维真需为“邮筒”做提前保护吗?