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

二分查找 又叫  折半查找。是对一组有序数列的查找,必须是有序的,下面根据一个简单的例子来说明一下。

25691423253236
012345678

      第一行为数组 aaa[ 9 ]  的9个数

      第二行为数组的下标

 

这9个数是有序排列,假如要查找此数组 aaa 中是否存在32这个数 ?

1—》 总是找数组中间那个数去比较, x=(0+8)/2=4  ,aaa[ x ]=14  就是第一次查找的中间数;

2—》 14<32,所以到5~8位去找;

3—》总是找中间那个数去比较, x=(5+8)/2=6(说一下,本来是6.5,但是下标变量x是int型,所以变成了6) ,  aaa[ x ]=25 ,

4—》25<32,所以到7~8位去找;

5—》总是找中间那个数,x=(7+8)/2=7,aaa[ x ]=32,找到了,到此OK。

思想:就是不断地去和中间那个数比较,然后才知道是去左半部分找,还是去右半部分找,  然后再进入到其中,再去比较中间那个数,依次下去。(就是一半一半地分下去,直到找到)

 

时间复杂度(最坏情况):O(log N)。

下面是算法的代码实现。

public int BinaryChop(int[] array,int value){ //第一个参数为数组,第二个参数为要查询的值
        int low=0;
        int hight=len-1;
        int mid;
        while (low<=hight){
            mid=(low+hight)/2;
            if(array[mid]==value){
                return mid; //如果找到了,就返回该值的下标
            }
            else if(array[mid]<value){
                low=mid+1;
            }
            else {
                hight=mid-1;
            }
        }
        return -1;  //如果找不到,就返回-1
    }

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值