查找算法之折半查找

article/2025/8/23 4:18:03

查找算法之折半查找

折半查找算法的思路

  1. 首先查找的关键字在有序的查找表内, 这是折半查找的前提.(我们假设查找表内元素升序排列)
  2. 确定查找表中的范围,一般用两个下标来表示范围: left = 0,right = length -1
  3. 利用给定的关键字和查找表中的中间位置(mid = (left+right)/2)的元素比较,若相等,则查找成功,如待查找的元素比中间的元素大,我们让查找的范围变成中间到尾端(mid+1到right),如查找元素小于中间元素,我们就在头端到中间查找(left到mid-1).
  4. 然后一直这样重复的进行,直到找到或者范围缩小为空即查找失败.

分析折半查找的时间复杂度

例子
下面我们来分析一下折半查找的平均查找长度,我们可以把折半查找过程用一棵二叉判定树来表示如下图
在这里插入图片描述
通过这样一棵数,我们可以计算出折半算法成功查找的平均查找长度
ASL = 11/6+22/6+3*3/6 = 7/3
无论查找是否成功,在有序表中查找某个关键字的过程,就是从根节点出发,走到该关键字对应节点的路径,而路径的长度就对应着查找长度.因此,折半查找的时间复杂度为O(log n)

折半查找的C语言实现

#include <stdio.h>int search(int (*), int, int);int main() {
int a[5] = {2,4,5,6,7};//初始化一个升序的数组;
printf("%d\n", search(a, 5, 7));//查找一个可以找到的元素;
printf("%d\n", search(a, 5, 8));
}int search(int *data, int length, int value) {
int left = 0, right = length - 1;
while (left<=right) {int mid = (left+right)/2;if (data[mid] == value) {return mid;//如果找到了.咱就直接返回元素的下标;}else if (data[mid] > value) {right = mid-1;//如何查找元素小于中间值,更新右坐标为mid-1;}else {left = mid+1;}
}
return -1;//如果循环结束没找到,我们返回-1;
}

总结 :折半查找的思想就是不断二分,因为查找的序列有序,所以咱就根据元素与中间值的比较进行舍弃,然后更新查找区间,注意这里循环条件是直到找到或者(left>right),所以更新节点是mid+1或mid-1;不然会陷入无限循环;


http://chatgpt.dhexx.cn/article/PeARZ3Aa.shtml

相关文章

数据结构-折半查找法的ASL计算

&#xff08;1&#xff09;通常用查找过程中对关键字的比较次数 作为衡量算法效率优劣的标准。 &#xff08;2&#xff09;平均查找长度—ASL&#xff0c;相当于时间复杂度分析时的f(n)函数。 &#xff08;3&#xff09;考研的一个考点。 &#xff08;4&#xff09;ASL求解的关…

用折半查找法(二分查找),实现查询数组中的元素

折半查找法 折半搜索&#xff08;英语&#xff1a;half-interval search&#xff09;&#xff0c;也称二分搜索&#xff08;英语&#xff1a;binary search&#xff09;、对数搜索&#xff08;英语&#xff1a;logarithmic search&#xff09;&#xff0c;是一种在有序数组中查…

算法篇——二分查找法(折半查找法)

二分查找法(折半查找法)&#xff1a;查找数组中是否包含指定元素。如果包含指定元素&#xff0c;则返回指定元素的index&#xff08;从0开始&#xff09;&#xff1b;如果不包含指定元素&#xff0c;则返回-1&#xff1b; 前提&#xff1a;数组中的元素必须是有序的。 原理&…

经典算法之折半查找法

活动地址&#xff1a;21天学习挑战赛 目录 一、 算法 概述 算法过程 二、代码实践 三、复杂度分析 时间复杂度 空间复杂度 四、优缺点分析 优点 缺点 一、 算法 概述 折半查找( Binary Search )也称二分查找&#xff0c;它是一种效率较高的查找方法。但是&#xff…

查找——1、折半查找法

1、折半查找又称为二分查找&#xff0c;是一种效率较高的查找方法。 2、折半查找的前提条件&#xff1a; 查找表中的所有记录是按关键字有序(升序或降序) 。 查找过程中&#xff0c;先确定待查找记录在表中的范围&#xff0c;然后逐步缩小范围(每次将待查记录所在区间缩小一半…

折半查找

一、定义&#xff1a; 折半查找也称二分法查找&#xff0c;是一种在有序数组中查找某一特定元素的搜索算法。这种方法要求待查找的表顺序存储而且必须是有序的。 二、查找过程 首先计算表中间的位置&#xff0c;将表中间位置处的关键字与查找的关键字进行比较&#xff0c;如果相…

折半查找法(二分搜索法)

学习C语言的时候&#xff0c;折半查找法应该是很多人绕不开的一个简单算法。作为一名C语言的初学者&#xff0c;第一次看这个算法的时候着实是有些头疼。不过仔细读读发现其实并没有想象中那么难。 折半搜索&#xff0c;也称二分搜索是一种在有序数组中查找某一特定元素的搜索算…

c语言:折半查找法(二分查找法)

折半查找法&#xff08;half-interval search&#xff09; 优点&#xff1a;比较次数少&#xff0c;查找速度快&#xff0c;平均性能好 缺点&#xff1a;是要求待查表为有序表&#xff0c;且插入删除困难。因此&#xff0c;折半查找方法适用于不经常变动而查找频繁的有序列表…

详解【C语言】中的二分查找法和折半查找法(例题解答)

目录 问题思路详解代码 问题 在一个有序数组中查找具体的某个数字n 比如我买了一双鞋&#xff0c;你好奇问我多少钱&#xff0c;我说不超过300元。你还是好奇&#xff0c;你想知道到底多少&#xff0c;我就让你猜&#xff0c;你会怎么猜&#xff1f; 答案&#xff1a;你每次…

数据结构之折半查找法——C语言实现

概念&#xff1a; 折半查找法又称为二分查找法&#xff0c;该方法要求带查找的表是顺序存储结构并且表中的关键字大小有序排列。 查找过程&#xff1a; 先确定待查记录所在的区间&#xff0c;然后逐渐通过待查找值与区间中间值进行比较进而调整区间大小&#xff0c;不断缩小…

C语言中折半查找法(二分法)的实现

折半查找法也叫做二分查找&#xff0c;顾名思义&#xff0c;就是把数据分成两半&#xff0c;再判断所查找的key在哪一半中&#xff0c;再重复上述步骤知道找到目标key; 注意&#xff1a;&#xff08;咳咳&#xff0c;敲黑板&#xff09;折半查找法仅适用于对已有顺序的数组、数…

C语言——折半查找法

一、使用场景 假如现在有一组数据&#xff0c;你想要查询这个具体某一个数据在这一堆数据中的所在位置&#xff0c;这个时候就需要程序在这一组数据中&#xff0c;找到与想要查找的目标数据相匹配的那个数据&#xff0c;然后返回相对应的位置。如果将问题再细化简化一点&#…

利用Xpath进行动态定位元素

xpath中提供了三个非常好的方法来为我们定位部分属性值&#xff1a; 1、contains(a, b) 如果a中含有字符串b&#xff0c;则返回true&#xff0c;否则返回false 2、starts-with(a, b) 如果a是以字符串b开头&#xff0c;返回true&#xff0c;否则返回false 3、ends-with(a, b) 如…

WebDriver操作浏览器以及浏览器页面元素的方法

上篇文章是讲了WebDriver定位元素的方法&#xff0c;这篇文章就要讲操作了&#xff0c;本文内容篇幅可能会比较长&#xff0c;一个是因为要操作的项目比较多&#xff0c;另一个是我会将完整的代码放进来&#xff0c;总体原则上我还是追求尽量细致一些&#xff0c;以便能方便读者…

UN Comtrade(联合国商品贸易统计数据库)数据爬取Python代码——使用动态IP

目录 Virtual Private Network 代理服务器 测试代理IP是否生效 上一篇博文UN Comtrade&#xff08;联合国商品贸易统计数据库&#xff09;数据爬取Python代码讲了如何使用Python爬取UN comtrade数据&#xff0c;适用于少量数据爬取&#xff0c;由于网站对访问频率和访问量的…

uni-app点击按钮,生成列表元素

在jQuery里面&#xff0c;动态生成div元素需要进行html的拼接&#xff0c;拼接完成再将拼接的内容放到指定的div里面去&#xff0c;在vue中一般编写代码时都不需要操作DOM元素&#xff0c;那么点击按钮的时候&#xff0c;怎么动态生成自己想要的列表元素&#xff1f; 其实很简…

DOM(二)修改元素内容、属性

一个元素可以修改它的内容、属性和样式。 目录 DOM修改元素 1. 修改内容 2. 修改属性 DOM修改元素 1. 修改内容 &#xff08;1&#xff09;获取从修改元素开始标签到结束标签之间的原始的 HTML 内容 元素对象.innerHTML innerHTML 获取元素内容时&#xff0c;原样返回 H…

UN Comtrade(联合国商品贸易统计数据库)数据爬取Python代码

目录 Python代码 根据需求改写url 报错应对办法 UN Comtrade数据库关于中国台湾的数据 2021/9/28更新&#xff1a;最近有用户反馈下载会出现错误内容如下图&#xff0c;感谢用户三眼皮138帮忙找出错误。官方应该是更新API的使用了&#xff0c;在爬取数据是将url中的关键词m…

uni-app中动态修改伪类元素的样式

1.首先定义一个变量 2.在伪元素的父元素上面动态添加style&#xff0c;注意这个 设置的变量 --state 因为下面是 var 调用的所以需要加两个杠. 3.使用var调用变量 --state