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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hailong 中级黑马   /  2014-9-14 15:19  /  1247 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class ArrayTest3 {
        // 数组的查找操作
        public static void main(String[] args) {
                int[] arr = { 1, 2, 4, 6, 9, 12, 15 };
                int x= getIndex(arr,4);
                System.out.println("x="+x);
                int y = halfSearch(arr, 2);
                System.out.println("y="+y);
                int z = halfSearch_1(arr,2);
                System.out.println("z="+z);
        }

        public static int getIndex(int[] arr, int key) {
                for (int x = 0; x < arr.length; x++) {
                        if (arr[x] == key)
                                return x;
                }
                return -1;
        }

        // 折半查找
        public static int halfSearch(int[] arr, int key) {
                int min=0,max=arr.length - 1,mid=(min + max) / 2;
                while (arr[mid] != key) {
                        if (key > arr[mid]) {
                                min = mid + 1;
                        } else if (key < arr[mid]) {
                                max = mid - 1;
                        }
                       
                        if (mid > max) {
                                return -1;
                        }
                        mid = (min + max) / 2;

                }
                return mid;
        }
       
        //折半第二种方法
        public static int halfSearch_1(int[] arr, int key) {
                int min = 0, max = arr.length - 1, mid;

                while (min <= max) {
                        mid = (max + min) >> 1;
                        if (key > arr[mid]) {
                                min = mid + 1;
                        } else if (key < arr[mid]) {
                                max = mid - 1;
                        } else {
                                return mid;
                        }

                }
                return -1;
        }
}
看过毕老师关于数组查找操作的视频后按老师的代码写的,通过折半查找数组中的元素2,正常应该是y=1,可为什么运行之后y=-1,麻烦各位大神给看下哪里错了,谢谢

7 个回复

倒序浏览
  1.   // 折半查找
  2.         public static int halfSearch(int[] arr, int key) {
  3.                 int min=0,max=arr.length - 1,mid=(min + max) / 2;
  4.                 while (arr[mid] != key) {
  5.                         if (key > arr[mid]) {
  6.                                 min = mid + 1;
  7.                         } else if (key < arr[mid]) {
  8.                                 max = mid - 1;
  9.                         }
  10.                         if (mid > max) {
  11. /*错在这,如果key < arr[mid],max = mid - 1直接就满足此处if条件,循环返回-1就结束了,应该把 mid = (min + max) / 2;放在这个if前执行*/
  12.                                 return -1;
  13.                         }
  14.                         mid = (min + max) / 2;

  15.                 }
  16.                 return mid;
  17.         }
复制代码
回复 使用道具 举报
本帖最后由 hailong 于 2014-9-14 16:18 编辑

噢,谢谢
回复 使用道具 举报
  把 if (mid > max) 该成if(min>max)就对了
回复 使用道具 举报
行进中的蜗牛 发表于 2014-9-14 16:07
把 if (mid > max) 该成if(min>max)就对了

谢谢,看的还是不够仔细呀,写错了一个字母
回复 使用道具 举报
嘿嘿,很正常,技术分怎么得啊?
回复 使用道具 举报
行进中的蜗牛 发表于 2014-9-14 16:31
嘿嘿,很正常,技术分怎么得啊?

用黑马币换。。。6:1
回复 使用道具 举报
新手上路,一个字,穷
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马