数据结构——二分查找(1)

王争数据结构笔记(15)

1、二分查找也称为折半查找算法,是一种非常简单易懂的快速查找算法。二分查找的时间复杂度为O(logn)。对数时间复杂度是一种极其高效的时间复杂度,比时间复杂度为O(1)的算法还要高效。

2、二分查找的非递归实现。

public int bsearch(int[] a,int n,int value){
     int low=0;
     int high=n-1;
     while (low<=high){
        int mid=(low+high)/2;
        if (a[mid]==value){
            return mid;
        }
        else if (a[mid]<value){
            low=mid+1;
        }
             else{
                 high=mid-1;
                 }

    }
    return -1;  

}

low,high,mid 为数组下标,low,high表示区间范围,mid表示中间位置

3、二分查找的递归实现。

public int bsearch(int[] a,int n,int val){
   return bsearchInternally(a,0,n-1,val);
}

private int bsearchInternally(int[] a, int low,int high,int value){
    if(low>high) return -1;
    int mid=low+((high-low)>>1);
    if(a[mid]==value){
     return mid;
     }
     else if (a[mid]<value){
      return bsearchInternally(a,mid+1,high,value);
     }
     else{
      return bsearchInternally(a,low,mid-1,value);
     }
    

}

4、二分查找的局限性:

     1)、二分查找依赖数组。这是因为数组按下标随机访问数据的时间复杂度是O(1),而链表随机访问的时间复杂度为O(n).

     2)、二分查找针对有序数据。适用于插入、删除操作不频繁,一次排序多次查找的场景。针对动态变化的数据集合,二分查找不再适用。

     3)、数据量较小的情形不适宜二分查找,这是因为顺序遍历也不错。数据量较大的情形不适宜二分查找,这是因为存储数据的空间必须是连续的。    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值