数据结构与算法(二分查找)

1>何为而分查找?

     二分查找针对的是有序的数据集合,每次都是通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到查找到该元素,或者区间缩小为0。

2>二分查找为何这么高效?

     我们假设数据的数据量为n,每次查找都会将数据集缩小为原来的一半,最坏的情况下 ,直到这区间缩小为空,

根据上式求得二分查找的时间复杂度为logn

3>二分查找的简单得到代码实现

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(mid == value){
         return mid;
     }else if(a[mid] < value){
            low = mid+1;
     }else{
         high = mid-1;
     }
     
}
     return -1;


}

注意点:循环退出的条件是low <=high;

              mid的取值:如果low  和high的取值是很大的话,mid计算的值可能出现溢出,改进的方式是(low +(high-low))/2

              low=mid+1,high=mid-1。注意这里的 +1 ,-1,如何直接写成low = mid,high=mid,可能出现死循环,这种事没有意义的.

4>二分法使用于那些场景

                   可知到,使用二分法查找要随机的访问元素,并进行比较,所以二分法查找依赖的数据结构是顺序存储结构,比如说是数组,可以随机访问元素进行比较,如果是基于链表,链表的随机访问时间复杂度是O(n),增大了二分查找性能,

                                其次二分查找针对的数据必须是有序的,所以在频繁的插入删除操作,我们为保证数据有序,必须使用其他排序算法保证数据有序,才能使用二分查找,而排序的成本本身比较高,二分查找另一个限制就是插入,删除比较少的数据集合当中来保证全局的有序.二分查找更适合静态有序集合数据.

                             二分法查找所针对的数据结构必须是顺序连续的,支持随机访问,如果内存分配不连续也不能使用二分查找

                             二分法查找如果针对的是数据量比较小的情况下,遍历O(n) = logn,2者的时间复杂度相近,完全遍历就可以了,所以二分法查找不使用小数据集.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值