黑马程序员技术交流社区

标题: java二分查找法,怎么弄 [打印本页]

作者: zyh1578814923    时间: 2015-11-21 22:18
标题: java二分查找法,怎么弄


作者: 李凯666    时间: 2015-11-21 22:18
ublic class erfen {

        /**
         * @param args
         */
        public static void main(String[] args) {
                int[] arr = {11,22,33,66,88,99};
                System.out.println(getIndex(arr,55));
        }
       
        public static int getIndex(int[] arr,int x){
                        int min = 0;
                        int max = arr.length-1;
                        int mid =(min+max)/2;
                        while (arr[mid] != x) {
                                if (arr[mid] < x) {
                                        min =mid+1;
                                }else if (arr[mid] > x) {
                                        max = mid-1;
                                }
                               
                                if (min>max) {
                                        return -1;
                                }
                                mid = (min+max)/2;
                        }
                        return mid;
               
        }
}
基本就是这样
作者: 萧未然    时间: 2015-11-22 14:33
是这样,找出了下标
作者: 1191065242    时间: 2016-5-1 16:52
public static void main(String[] args) {
                //二分法的查找前提是讲数组排序了,如何排序你可以自己用冒泡和选择
                int[] arr = {12,23,34,45,56,67,78};
                getIndex(arr);
        }

        private static int getIndex(int[] arr) {
                Scanner sca = new Scanner(System.in);
                System.out.println("现在输入你要查找的数字,如果不存在-1给你返回");
                int num = sca.nextInt();
                int min = 0;  //定义最小值,数组都是从0开始的
                int max = arr.length - 1; //定义最大值,最大值是你获取的长度-1
                int mid = (min + max) / 2; //获取中间数
                while (arr[mid] != num) {   //判断数组中间数跟你传来的数是不是相等
                        if(arr[mid] > num) {    //判断数组中间数是不是大于你传来的数
                                max = mid - 1;                //说明你的数小于中间数现在把你的最大值变为mid - 1
                        }else if(arr[mid] < num) {  //判断数组中间数是不是小于你传来的数
                                min = mid + 1;                        //说明你的数小于中间数现在把你的最小值变为mid + 1
                        }
                        mid = (min + max) / 2;                //根据上面的变化将你的mid的值重新分配新值
                        if(min > max) {
                                System.out.println("数字不存在");
                                return -1;
                        }
                }
                System.out.println("你输入的数字在"+mid+"的位子上");
                return mid;
        }






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2