java算法之折半查找

折半查找又称二分查找,优点:查询次数比较少,查找速度快,平均性能好。缺点:要求待查表为有序表,且插入困难,因此折半查找适用于不经常变动而查找频繁的有序列表。
基本思想:将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法终止;
如果x< a[n/2],则只要在数组a的左半部分继续搜索,如果x>a[n/2],则只要在数组a的右半部分搜素。
演示过程:设要查找的数为36     num=36

假设数组为:a[1,5,10,20,25,35,38]

step1:        int  low=0 high = a.length-1
注:
   low:数组中第一个元素的下角标
   high:数组中最后一个元素的下脚标
   mid:中间值

int mid = (low+high)/2 = (0+6)/2 = 3
a[mid] = a[3] = 20
因为 num>a[mid]
所以 low=mid+1=4 high=6
step2: mid=(4+6)/2=5
a[mid] = a[5] = 35;
因为: num>a[mid]
所以:low = mid+1 high=6
step3: mid = (low+high)/2=6
a[mid] = a[6] = 38
因为:  num< a[mid]
所以:low=6 high = mid-1 = 5
因为: low>high  
所以没找到。

注:low必须小于等于high


折半查找算法如下:

  public static void main(String[] args){
        int[] a = {1,10,15,25,35,50};
        Scanner scanner= new Scanner(System.in);
        System.out.println("请输入要查找的数:");
        int num = scanner.nextInt();
        //定义数组第一个元素下脚标
        int low =0;
        //最后一个元素的下角标
        int high = a.length-1;
        while (low<=high){
            int mid = (low+high)/2;
            if(num == a[mid]){
                System.out.println("找到了");
            }else if(num>a[mid]){
                low = mid+1;
            }else if(num<a[mid]){
                high = mid -1;
            }
        }
        if(low>high){
            System.out.println("数组中不存在此元素");
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值