二分查找(折半查找)探究学习

news/2024/11/29 6:40:59/

1.引入

 当我们想要查找在一个数组中某一个特定的数它的下标是什么的时候,我们最先想的方法是遍历数组,如下:

#include<stdio.h>
#include<string.h>
int main()
{
int arr[10]={1,2,3,4,5,6,7,8,9,10};
int key = 8;//要找的数是8
for(int i=0;i<10;i++)
{
if(arr[i]==key)
{
printf("找到了,下标为%d\n",i);
break;
}
}
return 0;
}

  但是这种查找方法有一定的局限性,因为如果当它数字很大的时候,我们便需要一个一个校对,对计算机的工作量比较大。

  ⽐如我买了⼀双鞋,你好奇问我多少钱,我说不超过300元。你还是好奇,你想知道到底多少,我就让你猜,你会怎么猜?你会1,2,3,4...这样猜吗?显然很慢;⼀般你都会猜中间数字,⽐如:150,然后看⼤了还是小了,这就是⼆分查找,也叫折半查找。

2.折半查找的要求以及其作用

a.所给的数组应该已经按照升序或者降序排列好了。

b.确定被查找范围的左右下标。

c.根据左右下标确定中间元素和要找的元素进行比较。

{找到了,就结束}

{找不到,依据大小关系,确定新的查找范围}

d.根据左右下标确定中间元素的下标。

#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");
}


http://www.ppmy.cn/news/1249234.html

相关文章

Dockerfile讲解

Dockerfile 1. 构建过程解析2. Dockerfile常用保留字指令3. 案例3.1. 自定义镜像mycentosjava83.2. 虚悬镜像 4. Docker微服务实战 dockerfile是用来构建docker镜像的文本文件&#xff0c;是由一条条构建镜像所需的指令和参数构成的脚本。 dockerfile定义了进程需要的一切东西&…

计算机人机界面

人机界面是指入与机器之间相互交流和影响的区域。人机界面包括对数据和信息的输入和输出方法&#xff0c;以及人们对机器的操作和控制。早期&#xff0c;人机交互界面是控制合&#xff0c;随后通过键盘进行操作&#xff0c;目前为鼠标和键盘操作&#xff0c;而智能手机采用触摸…

C#学习 - 事件

事件&#xff08;Event&#xff09;简介 类型的成员&#xff0c;使对象或类具备通知能力的成员 对象A拥有一个事件B&#xff0c;当事件B发生时&#xff0c;对象A又能通知别人的能力&#xff0c;且会推送通知内容&#xff08;事件参数&#xff09; 根据通知和事件参数来采取行动…

为WordPress开启webp和svg支持

webp是Google出的一种图片格式&#xff0c;是一种同时提供了有损压缩与无损压缩&#xff08;可逆压缩&#xff09;的图片文件格式&#xff0c;派生自影像编码格式VP8&#xff0c;被认为是WebM多媒体格式的姊妹项目&#xff0c;是由Google在购买On2 Technologies后发展出来&…

【Redis基础】Redis基本的全局命令

✅作者简介&#xff1a;大家好&#xff0c;我是小杨 &#x1f4c3;个人主页&#xff1a;「小杨」的csdn博客 &#x1f433;希望大家多多支持&#x1f970;一起进步呀&#xff01; Redis基本的全局命令 1&#xff0c;KEYS命令 语法&#xff1a;KEYS pattern KEYS命令用来查询服…

【Python】获取ip

要使用Python获取IP地址&#xff0c;可以使用socket库中的gethostname()函数和gethostbyname()函数。 import socketdef get_ip_address():hostname socket.gethostname()ip_address socket.gethostbyname(hostname)return ip_addressip get_ip_address() print("IP地…

rss服务搭建记录

layout: post title: RSS subtitle: vps搭建RSS服务 date: 2023-11-27 author: Sprint#51264 header-img: img/post-bg-universe.jpg catalog: true tags: - 折腾 文章目录 引言RSShub-dockerRSS-radarFreshrssFluent reader获取fever api配置Fluent Reader同步 结语 引言 一个…

【Qt之QSqlRelationalDelegate】描述及使用

描述 QSqlRelationalDelegate类提供了一个委托&#xff0c;用于显示和编辑来自QSqlRelationalTableModel的数据。 与默认委托不同&#xff0c;QSqlRelationalDelegate为作为其他表的外键的字段提供了一个组合框。 要使用该类&#xff0c;只需在带有QSqlRelationalDelegate实例…