呼叫,求助!!!没有运行错误,没有运行结果!
class HalfSearch 
{
public static void main(String[] args) 
{
int [] arr={1,2,4,5,8,12,41,67};
int index=halfSearch(arr,40);           //*****************************
System.out.println("index的值是:"+index);

}
public static int halfSearch(int [] arr,int key)
{
int min,max,mid;
min=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])
max=mid+1; if(min>max)
return -1; mid=(max+min)/2;
}
return mid;
}
}
注释的那一行,如果  int index=halfSearch(arr,T);  括号的里的变量我就用T代替了啊,如果T在数组中,那么就可以输出一个正确的答案,给我所在数组中的位置,如果T不在数组中,没有结果了,为什么不显示  —1啊,同时,它就不动了,什么结果都不显示,为什么啊?我也没有发现造成死循环啊!  

解决方案 »

  1.   

    递归必须有一个可以终止的边界条件,你这里只有两个return语句,一个在最后表示正确的查找结果,一个在while语句里面表示没有找到结果,明显有问题,才20分,我就懒得写代码帮你调了
      

  2.   


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

  3.   

    修改了一下
    public static int halfSearch(int [] arr,int key){
    int min,max,mid;
    min=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]){
    max=mid-1;
    }
    if(min>max){
    mid = -1;
    break;
    }
    }
    return mid;
    }
      

  4.   

    修改楼上代码如下public static int halfSearch(int [] arr,int key){
            int min,max,mid;
            min=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]){
                    max=mid-1;
                }
        mid=min+(max-min)/2;  ///////////
                if(min>max){
                    mid = -1;
                    break;
                }
            }
            return mid;
        }
      

  5.   

    //折半查找class HalfSearch 
    {
    public static void main(String[] args) 
    {
    int[] arr = {21,3,4,56,7,8,9,43}; int index = halfSearch(arr,345); System.out.println("index="+index);
    } public static int halfSearch(int[] arr,int key){

    int min,max,mid; min = 0;
    max = arr.length-1;

    while(min<=max){

    mid = (min+max)>>1; if(key>arr[mid])

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

  6.   


    对的,忘了重新计算mid的数值了