weixin_44647325 2019-04-10 11:52 采纳率: 20%
浏览 322
已采纳

有没有大神看一下代码,新手真的看不懂逻辑。为什么会返回5?

public class sorted {

    public static int binarySearch(int[] data, int target) {
        int start = 0;
        int end = data.length - 1;
        while(start <= end) {
            int mid = (start + end )/2;
            if(target< data[mid]) {
                end = mid -1;
            }else if(target > data[mid]) {
                start = mid +1;
            }else {
                return mid;
            }
        }
        return -1;
    }

    public static void main(String[] args) {
        int[] values = {1,2,3,4,5,8,8,8,};
        int target = 8;
        int a = binarySearch( values,target);
        System.out.println(a);
    }

}

  • 写回答

4条回答 默认 最新

  • 泡视界 2019-04-10 14:27
    关注

    这就是返回5啊,不然要返回什么……
    5是指target的引索值,英文叫index。程序里value为1,2,3,4,5,8,8,8 它的引索值是 0,1,2,3,4,5,6,7,8.
    你的这段程序就是用二分法在value里面找target,输出target的引索值。由于target=8,所以找到了第一个8,他的引索是5,所以输出5.
    仔细看看,可以带值进去看。
    刚开始start=0, end=8-1=7. 由于start小于end,所以执行循环,mid=(0+7)/2=3,因为mid是int型,所以只保留整数部分。
    那么data[3]应该就是value里面第4个数,也就是4。那么4<8,所以start=mid+1=3+1=4. 第一次循环结束,由于start4<end7,所以再次进入循环
    这时mid=(4+7)/2=5,只保留整数部分。那么data[5]就是value里第六个数,也就是8. 因为data[5]8=target8, 所以进入elise后面的语句。就是return mid。
    这不就return了5了吗。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置