黑马程序员技术交流社区
标题:
怎么没有输出结果
[打印本页]
作者:
王龙
时间:
2012-10-19 23:58
标题:
怎么没有输出结果
package number1;
//数组的查找操作
public class Test7 {
public static void main(String[] orgs){
int[] arr={1,5,7,8,13,15,18};
int index=halfSearch(arr,13);
System.out.println("index="+index);
}
public static int halfSearch(int[] arr,int key)
{
int min,max,mid;
min=0;
max=arr.length-1;
mid=(min+max)/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=(min+mid)/2;
}
return mid;
}
}
作者:
徐梦侠
时间:
2012-10-20 00:13
本帖最后由 徐梦侠 于 2012-10-20 00:14 编辑
因为你方法体中的出现了一个错误,没有正确计算mid
public static int halfSearch(int[] arr,int key)
{
int min,max,mid;
min=0;
max=arr.length-1;
mid=(min+max)/2;
int x=0,y=0;
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=(min+mid)/2;
//应该是mid=(max+min)/2;
}
return mid;
}
作者:
丁旭
时间:
2012-10-20 00:19
我把代码修改了一下。
public static int halfSearch(int[] arr,int key)
{
int min,max,mid;
min=0;
max=arr.length-1;
mid=(min+max)/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=(min+max)/2;
}
return mid;
}
作者:
sun~~
时间:
2012-10-20 02:41
本帖最后由 sun~~ 于 2012-10-20 02:48 编辑
毕老师讲的的折半查找,但是这个查找但是必须要保证该数组是有序的数组。
//package number1;这要注释掉
//数组的查找操作
public class Test7 {
public static void main(String[] orgs){
int[] arr={1,5,7,8,13,15,18};
int index=halfSearch(arr,13);
System.out.println("index="+index);
}
public static int halfSearch(int[] arr,int key)
{
int min,max,mid;
min=0;
max=arr.length-1;
mid=(min+max)/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=(min+mid)/2
;//这里出错应改为mid=(min+max)/2
}
return mid;
}
}
作者:
黑马李超
时间:
2012-10-20 07:01
本帖最后由 漠言 于 2012-10-20 08:07 编辑
折半查找是定义两个变量max和min,分别取有序数组的最大和最小角标,然后通过角标mid=(max+min)/2所对应的元素与要查找的元素key作比较。如果mid较大, max就要左移至mid-1;如果key较大,min就要右移至mid+1。如果在数组中找到与key相同的元素,就返回mid,即对应元素的角标。如果循环进行到min大于max,代表数组中没有与key相同的元素,返回-1,(数组角标没有-1,代表没有这个元素)。所以要把原代码中的
mid=(min+mid)/2改成mid=(min+max)/2
,即折中的意思
。如果是mid=(min+mid)/2的话,因为if(key>arr[mid]) min=mid+1; mid始终为3,min始终为4, 循环将无限进行下去,因此没有输出结果的。
作者:
王龙
时间:
2012-10-20 08:29
非常感谢大伙,努力中
作者:
王龙
时间:
2012-10-20 08:29
非常感谢大伙,努力中
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2