黑马程序员技术交流社区

标题: 结果怎么不对捏。。。 [打印本页]

作者: 成都校区    时间: 2012-4-30 19:00
标题: 结果怎么不对捏。。。
class HalfFind
{
        public static void main(String[] args)
        {
                int[] arr = {2,3,4,5,6,7,8,9};
                System.out.println(find(arr,1));
        }
        static int find(int[]arr,int value)
        {
                        int min =0;
                        int max =arr.length-1;               
                        int mid =(min+max)/2;
                        if(arr[mid]!=value)                          {
                                if (value > arr[mid])
                                {
                                        min =mid+1;
                                }
                                else if ((value < arr[mid]))
                                {
                                        max=mid-1;
                                }
                                       
                                if (min>max)
                                {
                                        return -1;
                                }

                                mid =(min+max)/2;
                        }
                       
                return mid;
                               
        }
               
}
作者: 罗旭维    时间: 2012-4-30 19:06
没有用递归必然要用到循环,楼主应该把搜索的代码放在循环中。
作者: 贾联国    时间: 2012-4-30 19:13
原因是你用的是if  而这里要用循环
class HalfFind
{
        public static void main(String[] args)
        {
                int[] arr = {2,3,4,5,6,7,8,9};
                System.out.println(find(arr,1));
        }
        static int find(int[]arr,int value)
        {
                        int min =0;
                        int max =arr.length-1;               
                        int mid =(min+max)/2;
                       while(arr[mid]!=value)    //这里要用循环才能正确的进行二分法查值                  
                             {
                                if (value > arr[mid])
                                {
                                        min =mid+1;
                                }
                                else if ((value < arr[mid]))
                                {
                                        max=mid-1;
                                }
                                       
                                if (min>max)
                                {
                                        return -1;
                                }

                                mid =(min+max)/2;
                        }
                        
                return mid;
                                
        }
               
}
作者: 何阳    时间: 2012-4-30 19:28
class HalfFind
{
        public static void main(String[] args)
        {
                int[] arr = {2,3,4,5,6,7,8,9};
                System.out.println(find(arr,1));
        }
        static int find(int[]arr,int value)
        {
                        int min =0;
                        int max =arr.length-1;               
                        int mid =(min+max)/2;
                                                //因为if循环执行一次,当你要查找的值不等于的时候,执行if里面的语句,就是把
                                                //把你所设定的角标改变,然后执行return mid.
                                                //if是分支语句,而while是循环语句,你所查找的数字不等于数组中的中间值时,他
                                                //分缩小范围继续查找,但是if就执行了一次,所以你应该用while循环,这个是二分
                                                //查找的原理。应该修改为while(arr[mid]!=value)
                        if(arr[mid]!=value) //                        
                                if (value > arr[mid])
                                        min =mid+1;
                                else if ((value < arr[mid]))
                                        max=mid-1;
                                if (min>max)
                                        return -1;
                                mid =(min+max)/2;
                        }         
                return mid;                     
        }         
}
作者: 成都校区    时间: 2012-5-2 18:28
哦 没有注意到,谢了撒!
作者: aawenwei    时间: 2015-6-16 00:34
娃哈哈 。。 飞哥 我看到了            
作者: 成都校区    时间: 2016-4-28 10:33
aawenwei 发表于 2015-6-16 00:34
娃哈哈 。。 飞哥 我看到了

好尴尬




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