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

Javascript二进制搜索算法无法在列表中找到数字,javascript,binary-search,Javascript,Binary Search,以下代码似乎无法在列表中找到号码。为什么会这样 尝试将要搜索的数字设为“9”,并使用由1-10(包括1-10)之间的数字组成的数字数组 数组=[1,2,3,4,5,6,7,8,9,10]; 计数=0; 函数binarySearcharray,编号{ mid=Math.floorarray.length/2; 如果数字===数组[mid]{ 返回计数; } 如果数字1,则为else{ 计数++; arrayFirst=array.0,数组[mid]; console.logtry:,数组[mid

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

尝试将要搜索的数字设为“9”,并使用由1-10(包括1-10)之间的数字组成的数字数组

数组=[1,2,3,4,5,6,7,8,9,10]; 计数=0; 函数binarySearcharray,编号{ mid=Math.floorarray.length/2; 如果数字===数组[mid]{ 返回计数; } 如果数字1,则为else{ 计数++; arrayFirst=array.0,数组[mid]; console.logtry:,数组[mid] console.logarrayFirst; 返回binarySearcharrayFirst,number; } 如果number>array[mid]&&array.length>1,则为else{ 计数++; arraySecond=array.paticearray[mid],array.length; console.logtry:,数组[mid] console.logarraySecond; 返回binarySearcharraySecond,number; } 否则{ 返回“编号不存在”; } } console.logbinarySearcharray,4 这:

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

 array = 1, x = 2, y = 3...;
所以数组只有1,而不是整个列表。还要记住,不建议声明没有var关键字的变量。它可能会意外覆盖现有的全局变量。相反,您应该根据该变量的使用情况使用var、let或const

相反,这应该是您的阵列:

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

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

 array = 1, x = 2, y = 3...;
所以数组只有1,而不是整个列表。还要记住,不建议声明没有var关键字的变量。它可能会意外覆盖现有的全局变量。相反,您应该根据该变量的使用情况使用var、let或const

相反,这应该是您的阵列:

array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
这里有几点提示:


您的条件包括一个未定义的变量arr。您一直在使用数组

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

我建议将变量arrayFirst、mid、arraySecond实例化为const const mid=。。。所以它们是块作用域,而不是全局变量

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

这里有几点提示:


您的条件包括一个未定义的变量arr。您一直在使用数组

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

我建议将变量arrayFirst、mid、arraySecond实例化为const const mid=。。。所以它们是块作用域,而不是全局变量

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

某些更改:

通过返回1或0或1加上带有子数组的调用结果,在函数内部进行计数

提前检查长度拼写问题。。。arr,对于不可访问的值返回零

使用而不是防止突变并获取索引,而不是项的值

最后返回1加上左侧或右侧的计数

函数binarySearcharray,编号{ log…数组; var mid=Math.floorarray.length/2; 如果number==数组[mid]返回1; 如果array.length有一些变化:

通过返回1或0或1加上带有子数组的调用结果,在函数内部进行计数

请提前检查长度拼写问题…arr,对于不可访问的值返回零

使用而不是防止突变并获取索引,而不是项的值

最后返回1加上左侧或右侧的计数

函数binarySearcharray,编号{ log…数组; var mid=Math.floorarray.length/2; 如果number==数组[mid]返回1; 如果array.length您使用的是array.0,array[mid]

array[mid]是数组中的值,需要减去array的元素数量。0,mid

另外,索引从0开始,因此您的数组[mid]使用的是第6个元素,而不是中间的元素。

您使用的是array.0,array[mid]

array[mid]是数组中的值,需要减去array的元素数量。0,mid


另外,索引从0开始,因此您的数组[mid]正在使用第6个元素,而不是中间元素。

aha!愚蠢的错误,谢谢我是Javascript新手!:没问题,我添加了一点解释。@Marcoz2007aha!愚蠢的错误,谢谢我是Javascript新手!:没问题,我添加了一点解释。@Marcoz2007您的条件包括一个未定义的变量arr…它被称为arrayYes,我刚才也发现了,谢谢!看看索引,当你做'Math.floorarray.length/2'时,你得到10,但数组[10]它是第11个元素你的条件包括一个未定义的变量arr…它叫arrayYes,我刚才也发现了,谢谢!看看索引,当你做'Math.floo'时 rarray.length/2`您得到10,但数组[10]是第11个元素