呼叫,求助!!!没有运行错误,没有运行结果!
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啊,同时,它就不动了,什么结果都不显示,为什么啊?我也没有发现造成死循环啊!
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啊,同时,它就不动了,什么结果都不显示,为什么啊?我也没有发现造成死循环啊!
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;
}
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;
}
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;
}
{
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;
}
}
对的,忘了重新计算mid的数值了