gpt4 book ai didi

c - 如何调试这个二分查找代码?

转载 作者:行者123 更新时间:2023-11-30 20:32:23 24 4
gpt4 key购买 nike

我不知道我的这个二分搜索代码有什么问题。对我来说似乎很好,但总是在输出中显示“未找到”。我不知道为什么。有人能找出问题所在吗?

#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!");
}

最佳答案

尽管您的数组已在此处排序,但将 high 初始化为 SIZE (100) 常量值是问题所在。如果您跟踪迭代中的低值和高值,您就会知道这一点。相反,你可以使用这个:

int arr[] = {10, 47, 67, 78, 95, 99};
int n = sizeof(arr)/ sizeof(arr[0]);

并将 n 传递给函数并初始化 high = n-1。

关于c - 如何调试这个二分查找代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47660382/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com