为什么这个函数 return -1?
Why does this function return -1?
我必须 运行 C 中的代码。该代码创建一个用于二分查找的函数。所以它只是读取一个数组大小的数字和一个数字 x 和 returns 它在数组中的位置。代码是:
long int binary(long int v[], long int n, long int x){
long int low = 0, high = n-1, mid;
while(low<=high){
mid = (high+low)/2;
if(x<v[mid]){
high = mid - 1;}
else if(x>v[mid]){
low = mid + 1;}
else{
return(mid);}
}
return(-1);
}
我不知道我是否完全理解这一点。我的理解是:
如果 x 小于数组中位置 mid 上的数字,则将值更改为高。
如果 x 大于数组中位置 mid 上的数字,它会将值更改为 low。
并且如果 x 等于数组中位置 mid 上的数字,则函数结束,并且 returns 为所需数字位置的值 mid。
我不认为我最终得到 return(-1)。这是否意味着代码无法找到所需号码的位置并 return 编辑了一个负值来表示有问题?
你是对的。当x is not equal to v[mid]
时的每一次迭代,要么低索引增加,要么高索引减少。如果 x
不存在于数组 v
中,在某些时候 low 的值将超过 high。然后,循环中断,函数 returns -1.
我必须 运行 C 中的代码。该代码创建一个用于二分查找的函数。所以它只是读取一个数组大小的数字和一个数字 x 和 returns 它在数组中的位置。代码是:
long int binary(long int v[], long int n, long int x){
long int low = 0, high = n-1, mid;
while(low<=high){
mid = (high+low)/2;
if(x<v[mid]){
high = mid - 1;}
else if(x>v[mid]){
low = mid + 1;}
else{
return(mid);}
}
return(-1);
}
我不知道我是否完全理解这一点。我的理解是:
如果 x 小于数组中位置 mid 上的数字,则将值更改为高。
如果 x 大于数组中位置 mid 上的数字,它会将值更改为 low。
并且如果 x 等于数组中位置 mid 上的数字,则函数结束,并且 returns 为所需数字位置的值 mid。
我不认为我最终得到 return(-1)。这是否意味着代码无法找到所需号码的位置并 return 编辑了一个负值来表示有问题?
你是对的。当x is not equal to v[mid]
时的每一次迭代,要么低索引增加,要么高索引减少。如果 x
不存在于数组 v
中,在某些时候 low 的值将超过 high。然后,循环中断,函数 returns -1.