gpt4 book ai didi

C:为什么我的二分查找会陷入死循环?

转载 作者:太空宇宙 更新时间:2023-11-04 06:07:58 27 4
gpt4 key购买 nike

我有一个程序使用二进制搜索来搜索文件 (numbers.dat) 并打印该值是否在数组中。目前,当我想搜索 numbers.dat 文件中的第一个值或不在 numbers.dat 文件中的值时,我得到一个无限循环,如果我想搜索文件中的任何其他值它会打印索引和未找到消息。

这是我的代码:

 int main() {
FILE *in_file; /* Input file */
int middle; /* Middle of our search range */
int low, high; /* Upper/lower bound */
int search; /* number to search for */
char line[80]; /* Input line */

in_file = fopen(DATA_FILE, "r");
if (in_file == NULL) {
fprintf(stderr,"Error:Unable to open %s\n", DATA_FILE);
exit (8);
}

/*
* Read in data
*/

max_count = 0;
while (1) {
if (fgets(line, sizeof(line), in_file) == NULL)
break;

/* convert number */
sscanf(line, "%d", &data[max_count]);
++max_count;
}

while (1) {
printf("Enter number to search for or -1 to quit:" );
fgets(line, sizeof(line), stdin);
sscanf(line, "%d", &search);

if (search == -1)
break;

low = 0;
high = max_count;

while (1) {
middle = (low + high) / 2;

if (data[middle] == search) {
printf("Found at index %d\n", middle);

}

if (low == high) {
printf("Not found\n");
break;
}

if (data[middle] < search)
low = (middle + 1);
else
high = (middle - 1);
}
}
return (0);
}

numbers.dat 文件的前几行是:4个6个141617如果我搜索 4 或 2,我得到一个无限循环,如果我搜索 6,我得到:
位于索引 1
没找到

最佳答案

  1. 如果 low > high,你应该打破 not found。
  2. 如果找到就不会中断,因此您会进行另一次迭代。
  3. 你总是检查中间。如果高或低有所需的结果怎么办?

关于C:为什么我的二分查找会陷入死循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5853705/

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