二分查找(基于有序数组)

本文介绍了二分查找的基本思想、算法实现以及基于二分查找的有序符号表。二分查找通过比较中间键来缩小搜索范围,适用于有序数据。性能上,二分查找通常优于顺序查找。此外,文章讨论了在需要高效查找和插入操作的场景下,如何结合二分查找和链式结构以实现更复杂的数据结构。
摘要由CSDN通过智能技术生成

1、基本思想

采用一对平行的数组,一个存储键一个存储值
实现的核心是 rank() 方法,它返回表中小于给定键的键的数量

这里写图片描述
这里写图片描述

2、算法实现

二分查找法:将被查找的键和子数组的中间键比较。如果被查找的键小于中间键,就在左子数组中继续查找,如果大于就在右子数组中继续查找,否则中间键就是我们要找的键。

实现 rank() 采用了二分查找法,rank()性质如下:
如果表中存在该键,rank() 返回该键的位置,也就是表中小于它的键的数量
如果表中不存在该键,rank() 仍返回表中小于它的键的数量
这里写图片描述

/*基于递归的二分查找*/
public int rank(Key key,int lo,int hi)
{                        
        if(hi<lo)
            return lo;
        int mid = lo+(hi-lo)/2;
        int cmp = key.compareTo(keys[mid]);
        if(cmp > 0)
            return rank(key, mid+1, hi);
        else if(cmp < 0)
            return rank(key, lo, mid-1);
        else return mid;
}
/*基于迭代的二分查找*/
public int rank(Key key)
{                  
        int lo=0, hi=N-1;
        while(lo <= hi)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值