吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1809|回复: 8
收起左侧

[求助] 初学者问题请教,这段二分法代码哪里出错了?

[复制链接]
Lee_cheap 发表于 2019-11-22 22:52
public static void main(String[] args) {
int[] arr = {1, 3, 5, 9, 18, 27, 36, 88, 96, 102};

System.out.println("二分查找法的返回元素值是:"+getSearch(arr,96));
}



public static int getSearch(int[] arr, int num) {

int min = 0;
int max = arr.length - 1;
int mid = (max + min) / 2;


while (true) {
if (num > arr[mid]) {
min = mid + 1;
System.out.println("min运行了"+min);
} else if (num < arr[mid]) {
max = mid - 1;
System.out.println("max运行了"+max);

} else {
System.out.println("mid运行了");
return mid;
}

if(max < min) {
System.out.println("-1运行了");
return -1;
}
}
}
——————————
运行结果,死循环:min运行了5

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
太空飞牙 + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

A风继续吹 发表于 2019-11-22 23:08
谢谢分享
MrSheng777 发表于 2019-11-22 23:27
孔小凡 发表于 2019-11-22 23:42
本帖最后由 孔小凡 于 2019-11-22 23:43 编辑

在while循环中mid值没有重新赋值,可以跟一遍代码,第一次跑完后,进入第二次循环,mid还是原来的值。可以把int mid = (max + min) / 2;移到循环体内
luanshils 发表于 2019-11-22 23:48
你得把mid扔进循环体内
这样通过判断,反复缩小范围,反复重定义min,max的值,最终找到
冥月影 发表于 2019-11-23 00:17
楼上那位老哥说得对,就是你mid没有变过,可能你忘记在min和max赋值后重新计算mid了。。。
小年轻在奋斗 发表于 2019-11-23 10:10
[Java] 纯文本查看 复制代码
public static void main(String[] args) {
        int[] arr = {1, 3, 5, 9, 18, 27, 36, 88, 96, 102};

        System.out.println("二分查找法的返回元素值是:"+getSearch(arr,96));
    }
    public static int getSearch(int[] arr, int num) {
        int min = 0;
        int max = arr.length - 1;

        while (true) {
            int mid = (max + min) / 2;
            if (num > arr[mid]) {
                min = mid + 1;
                System.out.println("min运行了"+min);
            } else if (num < arr[mid]) {
                max = mid - 1;
                System.out.println("max运行了"+max);
            } else {
                System.out.println("mid运行了");
                return mid;
            }

            if(max < min) {
                System.out.println("-1运行了");
                return -1;
            }
        }
    }

把mid的赋值放到循环里面就行了
 楼主| Lee_cheap 发表于 2019-11-24 16:14
感谢感谢,后来看出来,但没有及时过来看帖。
再次感谢帮助!
wzp144777 发表于 2019-11-24 17:05
这么写循环不是根本不会停止吗
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-30 10:13

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表