黑马程序员技术交流社区

标题: 数组折半查找的问题。。。。 [打印本页]

作者: 孙百鑫    时间: 2013-3-7 20:15
标题: 数组折半查找的问题。。。。
class ArrayTest3 //折半查找
{
        public static void main(String[] args)
        {
                int[] arr=new int[]{1,3,4,6,7,9};
                int x=haflSearch(arr,7);
                System.out.println("x="+x);
        }
        public static int haflSearch(int[] arr,int dey)//定义的一个函数用来查找
        {
                int min,max,mid;
                min=0;
                max=arr.length-1;
                mid=(min+max)/2;

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

                        mid=(max+min)/2;

                }
                return min;
        }
}

作者: 孙百鑫    时间: 2013-3-7 20:16
为什么我查找7的时候返回的是   3呀    查找9的时候返回的就是5了。。。。。。这是为什么呀???????????????
作者: BitmapFactory    时间: 2013-3-7 20:28
最后应该是return mid
作者: 孙百鑫    时间: 2013-3-7 20:39
张学林 发表于 2013-3-7 20:28
最后应该是return mid

OK  谢谢啦
作者: 孙百鑫    时间: 2013-3-7 20:44
张学林 发表于 2013-3-7 20:28
最后应该是return mid

OK  谢谢啦
作者: 张卫刚    时间: 2013-3-7 20:45
你是没有了解折半查打,int[] arr=new int[]{1,3,4,6,7,9};  第一次arr.length/2,arr角标是3,那arr[3]=4;4<7; 第二次6、7、9就是3/2 =1,也就是6,6《7,第三次7,9,2/2=1,也就是7=7,找到了,3次就找到了所以是3,查9就一样
作者: 江华    时间: 2013-3-7 22:23
一个电话聊了一个小时,回帖完了

说明一下我的解释吧:

你的代码的问题出在 wihle循环了
如果wihle循环条件不成立,说明 dey=arr[mid]
这个都等于它了,你返回的是什么?

这种问题,都不应该执行代码就能发现的问题。








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