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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public class BinarySearch1 {
        public static void main(String[] args) {
                int[]arr={1,21,31,41,51,61,71,81,91};
                System.out.println(search(arr,331));
        }

        private static int search(int[] arr ,int key) {
                int min=0;
                int max=arr.length;
                while (min<=max) {
                        int mid =(max+min)>>>1;
                        if (arr[mid]>key) {
                                max=mid-1;
                        }else if (arr[mid]<key) {
                                min=mid+1;
                        }else {
                                return mid;
                        }
                }
                return -1-min;
        }
}

6 个回复

倒序浏览
没看懂,现在还没学数组。啊哦   。。。
回复 使用道具 举报
public class test06 {
        public static void main(String[] args) {
                int[] arr = { 1, 21, 31, 41, 51, 61, 71, 81, 91 };
                System.out.println(search(arr, 3));
        }

        private static int search(int[] arr, int key) {
                int min = 0;
                int max = arr.length - 1;// 这里第一处错误,最大值应该是arr.length-1;
                int mid = (max + min)/2;
                while (arr[mid] != arr[key]) {            
                        if (arr[mid] >arr[key]) {
                                max = mid - 1;
                        } else if (arr[mid] <arr[key]) {
                                min = mid + 1;
                        }
                        mid = (max + min)/2;
                        if(min>max){return -1;}
                }
                        return arr[mid];
               

        }
}
回复 使用道具 举报
jiangshicun007 发表于 2015-12-1 10:49
public class test06 {
        public static void main(String[] args) {
                int[] arr = { ...

楼主你循环里的那个elses是什么意思,而且用key和值去比是几个意思?
回复 使用道具 举报
错误提示呢?
回复 使用道具 举报
int max=arr.length;应该是 int max=arr.length-1;要不然角标越界;
回复 使用道具 举报
另外,int mid =(max+min)>>>1;应该是int mid =(max+min)>>1;多移了一位;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马