查找优化

一、顺序查找

在某个数组中查找某个key时的一般方法:

...

for(i=0;i<=n;i++){

    if(key == a[i])

        return ;

}

...

复杂度为O(n)

需要判断i<=n和key == a[i]两个语句。

 

顺序查找改进:

如在数组头放入key值,

...

a[0] = key;

while(a[i] != key){

      i -- ;

}

...

复杂度为O(n)

只需要判断key != a[i]一个语句。

这种在查找方向的尽头放置“哨兵”,可以使得效率的提升。

 

二、折半查找(二分查找)

一般方法:

...

while(low < high){

      mid = (low + high)/2;

      if ...

}

...

优化:

插值查找:

将mid = (low + high)/2 = low + 1/2(high - low)      改进为 ===>>>      mid = low + (key - a[low])/(a[high - a[low]])*(high - low)

这样在关键字分布较为均匀,表较大的情况下有明显的改善。

斐波那契(Fibonacci)查找:略。

思想都是改进mid的切分方法。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值