如何调试这个二进制搜索代码?

时间:2017-12-05 18:27:54

标签: c

我不知道我的二进制搜索代码有什么问题。对我来说似乎很好,但总是在输出中显示“未找到”。我不知道为什么。有人可以确定问题吗?

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

1 个答案:

答案 0 :(得分:0)

虽然您的数组在这里排序,但是将高值初始化为SIZE(100)的常量值是个问题。如果在迭代中跟踪低值和高值,您就会知道。相反,你可以使用它:

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

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