dar*_*sky 2 c return function return-value
我写的二进制搜索中的返回值有问题.
我有以下内容:
int binarySearch(char*instructions [],int low,int high,char*string);
int main() {
char *instructions[]; // some array of strings - it does not include the string "jk"
char *string = "jk";
int high = inst_len;
int x = binarySearch(instructions, 0, high, string);
if (x == -1)
printf("not found");
else if (x == -2)
printf("error");
else
printf("Found at %d", x);
}
int binarySearch(char *instructions[], int low, int high, char *string) {
int mid = low + (high - low) / 2;
// Not found
if (high <= low)
return -1;
// If instructions[mid] is less than string
else if (strcmp(instructions[mid], string) > 0)
binarySearch(instructions, low, mid-1, string);
// If instructions[mid] is larger than string
else if (strcmp(instructions[mid], string) < 0)
binarySearch(instructions, mid+1, high, string);
// Return position
else
return mid;
}
Run Code Online (Sandbox Code Playgroud)
无论如何,在main
二进制搜索总是返回0.然而,当我将打印语句放在二进制搜索算法中时,我得到了-1
返回.为什么会这样?这很奇怪!
你要这个:
// If instructions[mid] is less than string
else if (strcmp(instructions[mid], string) > 0)
return binarySearch(instructions, low, mid-1, string);
// If instructions[mid] is larger than string
else if (strcmp(instructions[mid], string) < 0)
return binarySearch(instructions, mid+1, high, string);
Run Code Online (Sandbox Code Playgroud)
注意" return
"部分.
你也比你需要做更多次的比较; 你可以存储结果,strcmp
这样你只做一次:
int r = strcmp(instructions[mid], string);
if (r > 0)
return binarySearch(instructions, low, mid-1, string);
else if (r < 0)
return binarySearch(instructions, mid+1, high, string);
Run Code Online (Sandbox Code Playgroud)