黑马程序员技术交流社区
标题:
那错了。。。。。。。。。。
[打印本页]
作者:
张红伟
时间:
2013-10-3 01:00
标题:
那错了。。。。。。。。。。
public class arrDemo{
public static int halfselect(int[] arr,int key){
int min,max,mid;
min=0;
max=arr.length-1;
mid=(min+max)/2;
while(key!=arr[mid]){
if(key<arr[mid])
min=min+1;
else if(key>arr[mid])
max=max-1;
if(arr[min]>arr[max])
return -1;
}
return mid;
}
public static void main(String[] args){
int[] x={1,2,3,4,5,35};
int y=5;
halfselect(x,y);
}
}
作者:
酱爆
时间:
2013-10-3 01:47
public class arrDemo{
public static int halfselect(int[] arr,int key)
{
int min,max,mid;
min=0;
max=arr.length-1;
mid=(min+max)/2;
while(key!=arr[mid])
{
System.out.println("AAAAAAAAAAAAA" + max + mid + min);
if(key<arr[mid]) // 这个条件没有成立 , 所以min永远都是0
min=min+1;
else if(key>arr[mid])
max=max-1; // 循环5次后max就变成了-1,
if(arr[min]>arr[max]) //因为min为0,所以这个条件也不可能成立,max = -1 arr[-1] 抛异常了 ,
return -1;
}
return mid;
}
public static void main(String[] args)
{
int[] x={1,2,3,4,5,35};
int y=5;
halfselect(x,y);
}
}
复制代码
作者:
李政
时间:
2013-10-3 14:37
public static int halfselect(int[] arr,int key){
int min,max,mid;
min=0;
max=arr.length-1;
mid=(min+max)/2;
while(key!=arr[mid]){
if(key<arr[mid])
max=mid-1; //min=min+1; 这里有个判断上的错误
else if(key>arr[mid])
min=mid+1; //max=max-1;
mid=(max+min)>>1; //这里没有进行折半
if(min>max) //if(arr[min]>arr[max]) //这里应该写成坐标的比较,而不是坐标对应的值的比较,防止一些特殊情况的数组,如都是同一个数组成的数组,如果使用值比较,会出现角标越界
return -1;
}
return mid;
}
作者:
乔兵
时间:
2013-10-3 18:07
问题解决后,请修改帖子分类为:提问结束
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2