黑马程序员技术交流社区

标题: 大家帮我看看写的哪个地方出错了,结果与想要的不一致 [打印本页]

作者: zhanganping    时间: 2016-1-10 21:43
标题: 大家帮我看看写的哪个地方出错了,结果与想要的不一致
/*
折半  数组的查找操作;
*/
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;

        }
       
}



作者: OliverLC    时间: 2016-1-10 22:29
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]去比较
作者: 放养的饼干    时间: 2016-1-10 22:38
你的mid值没有初始化
mid =( min+max)/2
作者: 放养的饼干    时间: 2016-1-10 22:39
放养的饼干 发表于 2016-1-10 22:38
你的mid值没有初始化
mid =( min+max)/2

哦,看到了,初始化了,我在看看

作者: 放养的饼干    时间: 2016-1-10 22:44
不对,你mid初始化迟了,应该在while循环前,然后用你传进来的key和mid比较,如果大于mid就改动min。如果小于mid就改动max。
还有,查找是针对顺序数组而言的,你要么先编个排序方法给数组排序,要么你就直接输入一个排好的数组
作者: 549208564    时间: 2016-1-11 14:30
1楼说的对
作者: 随缘的影子    时间: 2016-1-11 16:51
。。。楼上都说完了,水一下吧
作者: kmustfeng    时间: 2016-1-11 17:24
2L正解,确实也是需要先排序在二分查找
作者: zhanganping    时间: 2016-1-11 21:40
放养的饼干 发表于 2016-1-10 22:44
不对,你mid初始化迟了,应该在while循环前,然后用你传进来的key和mid比较,如果大于mid就改动min。如果小 ...

奥。懂得了,谢谢兄弟
作者: zhanganping    时间: 2016-1-11 21:41
kmustfeng 发表于 2016-1-11 17:24
2L正解,确实也是需要先排序在二分查找

谢谢兄弟,我懂了
作者: 放养的饼干    时间: 2016-1-12 22:56
zhanganping 发表于 2016-1-11 21:41
谢谢兄弟,我懂了

不客气!加油




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