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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 成都校区 金牌黑马   /  2012-4-30 19:00  /  2765 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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;
                               
        }
               
}

6 个回复

倒序浏览
没有用递归必然要用到循环,楼主应该把搜索的代码放在循环中。
回复 使用道具 举报
原因是你用的是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;
                                
        }
               
}

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
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;                     
        }         
}

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
哦 没有注意到,谢了撒!
回复 使用道具 举报
娃哈哈 。。 飞哥 我看到了            
回复 使用道具 举报
aawenwei 发表于 2015-6-16 00:34
娃哈哈 。。 飞哥 我看到了

好尴尬
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马