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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zyh1578814923 中级黑马   /  2015-11-21 22:18  /  2560 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

8黑马币

最佳答案

查看完整内容

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; ...

3 个回复

倒序浏览
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;
               
        }
}
基本就是这样
回复 使用道具 举报
是这样,找出了下标
回复 使用道具 举报
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;
        }

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马