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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

/*
折半  数组的查找操作;
*/
class Test89 {
      public static void main(String[] args) {
                int[] arr = {2,5,8,10,41};
                int index = halfSearch(arr,10);
                System.out.println("index=" +index);
        }


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

        }
       
}


10 个回复

倒序浏览
class Test13 {
    public static void main(String[] args) {
              int[] arr = {2,5,8,10,41};
              int index = halfSearch(arr,10);
              System.out.println("index=" +index);
      }


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

      }
      
}

mid是索引值,而key是数组内元素的值,所以是拿key和arr[mid]去比较
回复 使用道具 举报
你的mid值没有初始化
mid =( min+max)/2
回复 使用道具 举报
放养的饼干 发表于 2016-1-10 22:38
你的mid值没有初始化
mid =( min+max)/2

哦,看到了,初始化了,我在看看
回复 使用道具 举报
不对,你mid初始化迟了,应该在while循环前,然后用你传进来的key和mid比较,如果大于mid就改动min。如果小于mid就改动max。
还有,查找是针对顺序数组而言的,你要么先编个排序方法给数组排序,要么你就直接输入一个排好的数组
回复 使用道具 举报
1楼说的对
回复 使用道具 举报
。。。楼上都说完了,水一下吧
回复 使用道具 举报
2L正解,确实也是需要先排序在二分查找
回复 使用道具 举报
放养的饼干 发表于 2016-1-10 22:44
不对,你mid初始化迟了,应该在while循环前,然后用你传进来的key和mid比较,如果大于mid就改动min。如果小 ...

奥。懂得了,谢谢兄弟
回复 使用道具 举报
kmustfeng 发表于 2016-1-11 17:24
2L正解,确实也是需要先排序在二分查找

谢谢兄弟,我懂了
回复 使用道具 举报
zhanganping 发表于 2016-1-11 21:41
谢谢兄弟,我懂了

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