A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 图兰朵 中级黑马   /  2016-3-28 02:46  /  465 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

[code]package com.heima.homework13;

public class Demo2_Array {

        /**
                 * A:案例演示
                        * 数组高级二分查找代码
                * B:注意事项
                                * 如果数组无序,就不能使用二分查找。
                                * 因为如果你排序了,但是你排序的时候已经改变了我最原始的元素索引。
         */
        public static void main(String[] args) {
                int[] arr = {11,22,33,44,55,66,77};
                System.out.println(getIndex( arr, 33));
                System.out.println(getIndex( arr, 55));
                System.out.println(getIndex( arr, 88));
        }

        public static int getIndex(int[] arr,int value) {
                int min = 0;
                int max = arr.length - 1;
                int mid = (min + max) / 2;
               
                while(arr[mid] != value) {
                        if (arr[mid] < value) {
                                min = mid + 1;
                        }else if (arr[mid] > value) {
                                max = mid - 1;
                        }
                       
                        mid = (min + max) / 2;
                       
                        if (min > max) {
                                return -1;
                        }
                }
                return mid;
        }
       
}
这个代码里面如果我要找55所对应的索引的话,那就是min = mid + 1;那就是min = 3 + 1 = 4; max = 6; mid = (min + max) / 2 = (4 + 6) / 2 = 5,那5所对应的数是66啊  不是我要找的55啊? 这是怎么回事啊?

3 个回复

倒序浏览
本帖最后由 dxw 于 2016-3-28 08:10 编辑

索引对应的是【0.1.2.3.4.5.6】
第一次mid=3
min=mid+1=4
第二次mid=(3+6)/2=5
max=6-1=5第三次mid=(4+5)/2=4
查找结束

回复 使用道具 举报
图片中有文字叙述,   卤煮看看 明白了不?

解答.png (86.92 KB, 下载次数: 6)

解答.png
回复 使用道具 举报
当mid+1=4后,会直接return mid.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马