折半查找C/C++代码实现

折半查找,也称二分查找,通过不断缩小查找区间,直到找到目标值或确定未找到。其时间复杂度为O(log2(n)),适用于有序的顺序存储结构。以下是C/C++实现代码,并展示了在不成功查找时的关键字比较次数不超过log2(n)取下限+1的特性。
摘要由CSDN通过智能技术生成

折半查找(二分查找):

折半查找的查找过程为:从表的中间记录开始,如果给定值和中间记录的关键字相等, 则查找成功;如果给定值大于或者小于中间记录的关键字, 则在表中大于或小于中间记录的那一半中查找,这样重复操作, 直到查找成功,每一次查找比较都使查找范围缩小一半。
例如:
在这里插入图片描述
把当前查找区间的中间位置作为根,树中每一结点对应表中一个记录,但结点值不是记录的关键字,而是记录在表中的位置序号,由此得到的二叉树称为折半查找的判定树
在这里插入图片描述
故根据树的性质:折半查找在查找不成功时和给定值进行比较的关键字个数最多也不超过log2(n)取下限+1。

算法效率:

折半查找的时间复杂度为O(log2(n))。
使用前提:要求线性表必须采用顺序存储结构, 而且表中元素按关键字有序排列。
所有折半查找不适用于数据元素经常变动的线性表。

代码如下:

(需要注意的是,循环执行的条件是low<=high,而不是low<high, 因为最后一个结点也需要比较)

#include<stdio.h>
#include<stdlib.h>

typedef int KeyType;
typedef int InfoType;

//线性表的顺序存储结构
typedef struct
{
   
	KeyType key;
	InfoType otherinfo;
}ElemType;
typedef
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值