我一直在努力学习二进制搜索是如何工作的,所以我搜索了一个代码并尝试了解每行的作用。有一条我不明白的路线。带"的行返回-1"。我不明白这意味着什么。有人能解释一下这行代码中会发生什么吗?
#include<stdio.h>
int binarySearch(int array[], int size, int searchValue){
int low = 0;
int high = size - 1;
while(low<=high){// is the array exhausted?
int mid = (low + high) / 2; //If not, find the middle index
if(searchValue == array[mid]){
return mid;
}
else if(searchValue > array[mid]){
low = mid + 1;
}
else{
high = mid - 1;
}
}
return -1;
}
int main(){
int array[] = {1,2,3,4,5,6,7};
int searchNum;
printf("Enter an integer:");
scanf("%d", &searchNum);
int result = binarySearch(array,7,searchNum);
if(result>=0){
printf("Found!");
}
else{
printf("Not found!");
}
getch();
}
答案 0 :(得分:1)
二进制搜索在数组中执行,数组的位置从0开始。因此,如果返回-1表示位置不在数组中或无法定位。
答案 1 :(得分:1)
执行while
循环并包含一个return语句,如果您要查找的项目在数组中,则while
循环中的返回将返回该项目的索引。如果找不到该项,则后面的return -1
语句将返回给调用者,即如果high>low
,则-1用于指示它在数组中作为-1的索引超出范围任何数组。如果没有return -1
语句,则会出现编译时错误,指出缺少return语句
执行支票时
if(result>=0) {
printf("Found!");
} else {
printf("Not found!");
}
如果二元搜索方法找到该项并返回索引(将> -1),则“Found!将打印到控制台,否则如果二进制搜索方法返回值&lt; 0,即-1然后在数组中找不到该项,因此 Not Found!被打印到控制台,单独的if语句可以为您的二进制搜索提供一个很好的解释!