15.有序表查找与线索索引查找

转载请表明出处:http://blog.csdn.net/u012637501
一、有序表查找
1.折半查找/二分查找算法
(1)基本思想:在顺序存储有序表中,中间纪录(a[mid]=key)作为比较对象,若给定值与中间纪录的关键字相等,则查找成功;若给定值小于中间纪录的关键字,则在中间纪录的左半区继续查找;若给定值大于中间纪录的关键字,则在中间纪录的右半边。不断重复上述过程,直到查找成功,或所有查找区域无记录,查找失败为止。
(2)使用条件:线性表中的纪录是关键码有序的(通常是从小到大有序),线性表必须采用顺序存储,即有序表顺序存储
(3)算法实现
/*折半查找
 *    a为线性表数组,n为数据元素总个数,key为要查找的关键值*/
int Binary_Search(int *a,int n,int key)
{
    int low,high,mid;
    low=1;                    //定义最低下标为纪录首位
    high=n;
    while(low<=high)
    {
        mid=(low+high)/2;    //折半(取整)
        if(key<a[mid])            //若查找值比中值小
                    high=mid-1;    //最高下标调整到中位小一伟
        else if(key>a[mid])    //若查找值比中值大
                    low=mid+1;    //最低下标调整到中位下标大一位
        else
                    return mid;    //若相等则说明Mid即为查找到的位置,返回该位置地址
    }
    return 0;
}
(4)举例
    假设有一有序表a={0,1,16,24,35,47,59,62,73,88,99},n=10,key=62。即除0下标外共10个数字,对它进行查找是否存在62这个数。
a.查找步骤:
第一步:.a[mid]=a[5]=47<key,则low=mid+1=6,此时,mid=(6+10)=8

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值