黑马程序员技术交流社区

标题: 运行不显示结果 [打印本页]

作者: 忘记了    时间: 2013-11-23 23:46
标题: 运行不显示结果
本帖最后由 忘记了 于 2013-11-24 01:25 编辑

public class halfSearch {
        public static void main(String[] args)
        {
                int[] arr = {1,2,3,4,5,6,7,};
                int index1 = halfSearch_1(arr,4);
                int index2 = halfSearch_2(arr,7);
                System.out.println("index1="+index1);
                System.out.println("index2="+index2);
        }
        public static int halfSearch_1(int[] arr,int key)
        {
                int min,max,mid;
                min=0;
                max=arr.length-1;
                mid=min+max/2;
               
                while(arr[min]!=key)
                {
                        if(key>arr[mid])
                        min=mid+1;
                        
                        else if(key<arr[mid])
                        max=mid-1;

                        mid=(max+min)/2;

                        if(min>max)
                                return -1;
                }
                return mid;
        }


        public static int halfSearch_2(int arr[],int key)
        {
                int min,max,mid;
                min=0;
                max=arr.length-1;

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

//运行完了没看见输出??
作者: 樊志伟    时间: 2013-11-24 00:33
你的代码里面halfSearch_1中的while条件不对。应该是(arr[mid]!=key),不能是key与最小脚标的值比。应该是key与中间脚标的值进行比较。可能是你抄错了吧。还有就是,提醒你一下,即使是if和else if 里面是单行代码也最好用大括号括起来。修改后的代码如下
  1. public static int halfSearch_1(int[] arr,int key)
  2. {
  3.                  int min,max,mid;
  4.                  min=0;
  5.                  max=arr.length-1;
  6.                  mid=min+max/2;
  7.                  
  8.                  while(arr[mid]!=key)
  9.                  {
  10.                          if(key>arr[mid])
  11.                          min=mid+1;
  12.                         
  13.                          else if(key<arr[mid])
  14.                          max=mid-1;

  15.                          mid=(max+min)/2;

  16.                          if(min>max)
  17.                                  return -1;
  18.                  }
  19.                  return mid;
  20.          }
复制代码

作者: 忘记了    时间: 2013-11-24 01:24
求科普~怎么弄代码框啊~
作者: 徐君    时间: 2013-11-24 09:30
你这个不是二分查找吗?
public static int halfSearch_1(int[] arr,int key)
        {
                int min,max,mid;
                min = 0;
                max = arr.length-1;
                while(min<=max)
                {
                        //获取中间角标。
                        mid = (max+min)/2;

                        //获取中间角标上的元素和key进行比较。
                        if(key>arr[mid])
                                min = mid + 1;
                        else if(key<arr[mid])
                                max = mid - 1;
                        else
                                return mid;
                }
                return -1;
        }




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