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

C:每日一题:二分查找

1、知识介绍:

1.1 概念:

二分查找是一种在有序数组中查找某一特定元素的搜索算法

1.2 基本思想:

每次将待查找的范围缩小一半,通过比较中间元素与目标元素的大小,来决定是在左半部分还是右半部分继续查找。

举个生活中的小例子:

比如说你朋友和你说她买了一件衣服价格不超过300元,然后让你猜一猜具体的价格,你肯定不会像 1 2 3……这样一个一个猜,而是先猜中间值150,如果实际价格比150大,则0~150之间的数字就不需要再猜,此时范围便缩小到150~300;这时候再猜225,如果实际价格小于225元,则225~300之间的数字就不需要再猜了,经过这样几次的猜测后,范围会逐渐缩小,大大提高了猜中数字的效率,这种思想就是二分查找。

1.3 二分查找的优缺点:

优点:二分查找的效率很高,在查找有序数组中的数字时,比遍历数组的效率高很多;

不足:二分查找的使用条件很苛刻,只有在有序数组中才能使用二分查找。

2、题目

写一个二分查找函数

功能:在一个升序数组中查找指定的数值,找到了就返回下标,找不到就返回-1.

int arr[ 10] = {11,23,23,56,77,88,98,111,121,131}

3、思路:

关于查找数组中的元素,我们一般是通过下标来锁定元素

3、 分析main函数

int main()
{int arr[] = {11,23,23,56,77,88,98,111,121,131};int k = 0;scanf("%d", &k);//输入想要找的值int sz = sizeof(arr) / sizeof(arr[0]);//获取元素个数int left = 0;int right = sz - 1;int result = bin_search(arr, left, right, k);if (result != -1) {printf("找到了,下标为: %d\n", result);}else {printf("未找到\n");}return 0;
}

3.1  代码解释int left = 0; int right = sz - 1;

 3.2 代码解释 int result = bin_search(arr, left, right, k);

 bin_search是一个自定义函数,用来实现二分查找的过程

int result = bin_search(arr, left, right, k);是调用了一个名为 bin_search 的函数,并将返回值存储在变量  result 中。

  • arr 是要进行查找操作的数组。
  •  left 和 right 分别是数组的起始下标和结束下标,确定了当前要查找的范围。
  • k 是要在数组中查找的目标值。

4、分析函数bin_search

int bin_search(int arr[], int left, int right, int k)
{int mid = (left + right) / 2;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;
}

4.1 二分查找的运算方式:

5、完整代码

#include <stdio.h>
int bin_search(int arr[], int left, int right, int k)
{int mid = (left + right) / 2;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[] = {11,23,23,56,77,88,98,111,121,131};int k = 0;scanf("%d", &k);int sz = sizeof(arr) / sizeof(arr[0]);int left = 0;int right = sz - 1;int result = bin_search(arr, left, right, k);if (result != -1) {printf("找到了,下标为: %d\n", result);}else {printf("未找到\n");}return 0;
}

  函数bin_search  会在给定的数组范围 left 到  right 内查找目标值 k ,并返回找到目标值时的下标或者 -1 表示未找到。然后这个返回值就被赋值给了 result  ,后续的代码会根据 result  的值来判断是否找到了目标值。

6、不使用函数的二分查找

#include <stdio.h>
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int k = 7;scanf("%d", &k);int sz = sizeof(arr) / sizeof(arr[0]);int left = 0;int right = sz - 1;int flag = 0;while(left <= right){int mid = (left + right) / 2;if (arr[mid] < k){left = mid + 1;}else if (arr[mid] > k){right = mid - 1;}else{printf("找到了,下标位%d\n", mid);flag = 1;break;}}if (flag == 0)printf("没找到");return 0;
}

如果觉得还不错的话,就给小编一个三连吧!!!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • DevExpress开发WPF应用实现对话框总结:编织界面的艺术之旅
  • 搭建jenkins+k8s过程中遇到的问题
  • HarmonyOS应用开发学习-ArkTs声明式UI描述
  • 《框架封装 · 优雅接口限流方案》
  • 第R2周:Pytorch实现:LSTM-火灾温度预测
  • 20240812软考架构-------软考36-40答案解析
  • Haproxy知识点
  • sp eric靶机渗透测试
  • 【学习笔记】Day 13
  • RuoYi-Vue新建模块
  • 复杂SQL查询案例分析:计算每个月的累积唯一用户数
  • LVS详解
  • 【已解决】AttributeError: ‘diet’ object has no attribute ‘has_key’
  • 前端性能优化方法
  • 快速拷贝复制工具软件@拷贝工具@多线程拷贝@robocopy
  • ----------
  • @jsonView过滤属性
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • canvas 绘制双线技巧
  • canvas 五子棋游戏
  • co模块的前端实现
  • DataBase in Android
  • EOS是什么
  • Javascript Math对象和Date对象常用方法详解
  • Laravel Telescope:优雅的应用调试工具
  • linux安装openssl、swoole等扩展的具体步骤
  • mockjs让前端开发独立于后端
  • Nodejs和JavaWeb协助开发
  • PHP变量
  • Python学习之路13-记分
  • React-生命周期杂记
  • 读懂package.json -- 依赖管理
  • 如何合理的规划jvm性能调优
  • 少走弯路,给Java 1~5 年程序员的建议
  • 首页查询功能的一次实现过程
  • 原生 js 实现移动端 Touch 滑动反弹
  • 智能合约Solidity教程-事件和日志(一)
  • 主流的CSS水平和垂直居中技术大全
  • 阿里云服务器购买完整流程
  • 积累各种好的链接
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • ###C语言程序设计-----C语言学习(6)#
  • #控制台大学课堂点名问题_课堂随机点名
  • #微信小程序:微信小程序常见的配置传值
  • (03)光刻——半导体电路的绘制
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (k8s)kubernetes集群基于Containerd部署
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (转) Face-Resources
  • .NET 的程序集加载上下文