class IndexSearch{
public static void main{String [] args)
{
int[] arr={1,2,3,4,5,6,7,8,9,10,11,22,33,44,55,66,77,88,99,100};
int index=search(arr,77);
System.out.println("index="+index);
}
int search(int arr,key)
{
int min=arr[0];int max=arr.length-1;
int mid=(min+max)/2
while(arr[mid]!=key)
{
if(key>arr[mid])
min=mid+1;
else if(key<arr[mid])
max=mid-1;
mid=(min+max)/2
if(min>max)
return -1;
}
return mid;
}
}
为什么上面的代码会有这种问题:编译没错,100可以查的到,99可以查的到,88可以查的到,77机子就卡的不得动了。各位大神指教一下啊,折半查找。if(min>max)这个条件我知道是在里面查不到的语句,但我不能理解这句。
public static void main{String [] args)
{
int[] arr={1,2,3,4,5,6,7,8,9,10,11,22,33,44,55,66,77,88,99,100};
int index=search(arr,77);
System.out.println("index="+index);
}
int search(int arr,key)
{
int min=arr[0];int max=arr.length-1;
int mid=(min+max)/2
while(arr[mid]!=key)
{
if(key>arr[mid])
min=mid+1;
else if(key<arr[mid])
max=mid-1;
mid=(min+max)/2
if(min>max)
return -1;
}
return mid;
}
}
为什么上面的代码会有这种问题:编译没错,100可以查的到,99可以查的到,88可以查的到,77机子就卡的不得动了。各位大神指教一下啊,折半查找。if(min>max)这个条件我知道是在里面查不到的语句,但我不能理解这句。
public static void main{String [] args)你这代码编译能没错???
这代码有问题吧
public static void main{String [] args}
{
int[] arr={1,2,3,4,5,6,7,8,9,10,11,22,33,44,55,66,77,88,99,100};
int index=search(arr,77);
System.out.println("index="+index);
}
int search(int arr,key)
{
int min=0;int max=arr.length-1;
int mid=(min+max)/2
while(arr[mid]!=key)
{
if(key>arr[mid])
min=mid+1;
else if(key<arr[mid])
max=mid-1;
mid=(min+max)/2
if(min>max)
}
return mid;
}
刚才写快了
public class IndexSearch{
public int search(int[] arr,int key) {
int min=0;int max=arr.length-1;
int mid=(min+max)/2;
while(arr[mid]!=key)
{
if(key>arr[mid]) {
min=mid+1;
mid=(min+max)/2;
} else if(key<arr[mid]) {
max=mid-1;
mid=(min+max)/2;
}
if(min>max) {
return -1;
}
}
return mid;
}
public static void main(String[] args) {
IndexSearch s = new IndexSearch();
int[] arr={1,2,3,4,5,6,7,8,9,10,11,22,33,44,55,66,77,88,99,100};
int index=s.search(arr,77);
System.out.println("index="+index);
}
}
while(arr[mid]!=key)
{
if(key>arr[mid])
min=mid+1;
else if(key<arr[mid])
max=mid-1;
mid=(min+max)/2
这样不可以吗?
search(arr, 77);
结果:index=16
关于if(min>max),你思考查到最后剩1个数并且不匹配的情况就理解了。
while(arr[mid]!=key)
{
if(key>arr[mid]){
min=mid+1;}
else{
max=mid-1;}
mid=(min+max)/2