Java二进制搜索算法无法在列表中找到数字

问题描述 投票:1回答:2

以下代码似乎无法在列表中找到该号码。为什么会这样?

尝试将数字搜索为'9'并使用由1到10之间的数字组成的数字数组。

array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
count = 0;

function binarySearch(array, number) {
    mid = Math.floor(array.length / 2);
    if (number === array[mid]) {
        return count;
    }

    else if (number < array[mid] && array.length > 1) {
        count++;
        arrayFirst = array.splice(0, array[mid]);
        console.log("Tried: ", array[mid])
        console.log(arrayFirst);
        return binarySearch(arrayFirst, number);
    }

    else if (number > array[mid] && array.length > 1) {
        count++;
        arraySecond = array.splice(array[mid], array.length);
        console.log("Tried: ", array[mid])
        console.log(arraySecond);
        return binarySearch(arraySecond, number);
    }

    else {
        return 'number doesnt exist';
    }


}
console.log(binarySearch(array, 4));
javascript binary-search
2个回答
3
投票

此:

array = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10;

不是数组,它被解释为初始化列表,如下所示:

 array = 1, x = 2, y = 3...;

因此您的array只是1,而不是整个列表。

相反,这应该是您的数组:

array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

1
投票

这里的几个指针:

  • 您的条件包括未定义的变量arr。您一直在使用array

  • 您的数组必须为array = [1,2,3]

  • 我建议将变量arrayFirst, mid, arraySecond实例化为const const mid = ...

编辑:看来您已经修改了arr条件。请避免进行编辑,因为它会使答案无关紧要。

© www.soinside.com 2019 - 2024. All rights reserved.