折半查找(Binary Search)

本文详细介绍了二分查找算法的工作原理及实现步骤,并通过具体的伪代码示例解释了如何进行二分查找。此外,还分析了二分查找的时间复杂度及其在不同情况下的表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

前提条件:查找表中的所有记录是按关键字有序(升序或降序) 。

1  查找思想

用Low、High和Mid表示待查找区间的下界、上界和中间位置指针,初值为Low=1,High=n。

⑴  取中间位置Mid:Mid=(Low+High)/2 ;

⑵  比较中间位置记录的关键字与给定的K值:

①  相等: 查找成功;

②  大于:待查记录在区间的前半段,修改上界指针: High=Mid-1,转⑴ ;

③  小于:待查记录在区间的后半段,修改下界指针:Low=Mid+1,转⑴ ;

直到越界(Low>High),查找失败。

 

int  Bin_Search(SSTable  ST , KeyType  key)

{   

         int  Low=1,High=ST.length, Mid ;

         while (Low<High)

         {    

                   Mid=(Low+High)/2 ;

                   if  (EQ(ST. elem[Mid].key, key)) 

                        return(Mid) ;

                   else if (LT(ST. elem[Mid].key, key)) 

                 Low=Mid+1 ;

            else   High=Mid-1 ;

         }

         return(0) ;      /*   查找失败  */

}

 

2 算法分析

①  查找时每经过一次比较,查找范围就缩小一半,该过程可用一棵二叉树表示:

◆ 根结点就是第一次进行比较的中间位置的记录;

◆ 排在中间位置前面的作为左子树的结点;

◆ 排在中间位置后面的作为右子树的结点;

对各子树来说都是相同的。这样所得到的二叉树称为判定树(Decision Tree)。

②  将二叉判定树的第ë㏒2nû+1层上的结点补齐就成为一棵满二叉树,深度不变,h= ë㏒2(n+1)û 。

③  由满二叉树性质知,第i 层上的结点数为2i-1(i≤h) ,设表中每个记录的查找概率相等,即Pi=1/n,查找成功时的平均查找长度ASL: ,当n很大 (n>50)时, ASL≈ ㏒2(n+1)-1。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值