黑马程序员技术交流社区

标题: 折半查找,出现错误,求指错 [打印本页]

作者: 唐学松    时间: 2012-9-21 16:21
标题: 折半查找,出现错误,求指错
本帖最后由 唐学松 于 2012-9-23 11:58 编辑

class zheban
{
        public static void main(String args[])
        {
                int [] arr={2,6,8,10,12,18,};
                int index=array(arr,10);
                System.out.println("index"+index);
                }
        public static int array(int[] arr,int key)
        {
        int min=0;
        int max=0;
        int mid=0;
        max=arr.length-1;
        mid=(max+min)/2;
        
        while (arr[mid]!=key)

        {
                if (key>arr[mid])
               
                {min=mid+1;}
                else if (key<arr[mid])
                {min=mid-1 ;}
                }
                        return mid;
        }
}


作者: 皮卫凯    时间: 2012-9-21 16:49
      
        while (arr[mid]!=key)

        {
                if (key>arr[mid])                    
                       min=mid+1;
                else if (key<arr[mid])
                        min=mid-1 ;                 // max=mid-1;
                 else     
                        return mid;                 
        }



作者: 蔡汉康    时间: 2012-9-21 17:06
本帖最后由 andychua 于 2012-9-21 17:09 编辑

class zheban
{
        public static void main(String args[])
        {
                int [] arr={2,6,8,10,12,18,};
                int index=array(arr,10);
                System.out.println("index="+index);
        }
        public static int array(int[] arr,int key)
        {
                 int min=0;
                 int max=arr.length-1;
                 int mid=(max+min)/2;
        
        while (arr[mid]!=key)
                        {                        
                         if (key>arr[mid])
                                {min=mid+1;}
                         else if (key<arr[mid])
                               {max=mid-1 ;}//这步注意了 应该是max而不是min
                         mid=(max+min)/2;//这步缺少了,用于计算下一次折半的中位数

                         /*下面这2步是用于判断折半排序的终止的,你之前的代码因为没有
                        这2个步骤,所以一直停留在while()循环当中*/

                         if(min>max)
                         return -1;

                        }
                return mid;
                }
}




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