我不知道我的二进制搜索代码有什么问题。对我来说似乎很好,但总是在输出中显示“未找到”。我不知道为什么。有人可以确定问题吗?
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define SIZE 100
void binarySearch(int, int*);
int arr[SIZE];
int low = 0, high = SIZE - 1;
int main() {
int arr[SIZE] = { 10, 47, 67, 78, 95, 99 };
binarySearch(95, arr);
}
void binarySearch(int key, int *arr) {
if (arr[low] == key) {
puts("Found!");
return;
}
while (low <= high) {
int mid = low + (high - 1) / 2;
if (key == arr[mid]) {
printf("Data found at index: %d\n", mid);
return;
}
else if (key > arr[mid]) {
low = mid + 1;
}
else {
high = mid - 1;
}
}
puts("\nData not found!");
}
答案 0 :(得分:0)
虽然您的数组在这里排序,但是将高值初始化为SIZE(100)的常量值是个问题。如果在迭代中跟踪低值和高值,您就会知道。相反,你可以使用它:
int arr[] = {10, 47, 67, 78, 95, 99};
int n = sizeof(arr)/ sizeof(arr[0]);
并将n传递给函数并初始化high = n-1。