【问题标题】:Binary Search loop二分搜索循环
【发布时间】:2020-04-15 09:54:05
【问题描述】:

我必须在 typescript 中对名称目录进行二进制搜索,如果名称在数组中,则代码可以正常工作,但如果名称不在数组中,则会陷入无限循环。

有人可以帮助我吗?请! 这是代码:

var initialArray = ['Diego', 'David','Mauricio']
var sortedArray = initialArray.sort()
function search(find) {
    var leftLimit = initialArray[0]
    var leftLimitIndex = initialArray.indexOf(leftLimit)
    var rightLimit = initialArray[initialArray.length - 1]
    var rightLimitIndex = initialArray.indexOf(rightLimit) 
    var pivotIndex = 0 
    var index = -1 
      while (compare(leftLimit, rightLimit)) {
        pivotIndex = Math.floor((leftLimitIndex + rightLimitIndex)/2) 
        console.log(pivotIndex) 
        if (initialArray[pivotIndex] == find) {
            index = pivotIndex 
            break 
        }
        else {
            if (compare(initialArray[pivotIndex], find)) {
                leftLimitIndex = pivotIndex + 1 

            }
            else {
                rightLimitIndex = pivotIndex - 1 
            }
        }
        console.log(initialArray[pivotIndex]) 
    }
    console.log("Result: "+initialArray[index]) 
        return initialArray[index] 
}
function compare(leftLimit, rightLimit) {
    var r = (leftLimit < rightLimit  ? -1 : 1) 
    if (r < 0) {
        return true 
    }
    else {
        return false 
    }
}

【问题讨论】:

  • 你需要确认left&gt;=0right&lt;length如果没有发生就停止。

标签: javascript binary-search


【解决方案1】:

您没有考虑更改的限制索引,最后您不知道您是否没有更多的搜索选项,或者 findTerm 是否根本不存在。 您只需要更改以下行

while (compare(leftLimit, rightLimit) && leftLimitIndex <= rightLimitIndex) {

问候,

【讨论】:

  • 非常感谢!! :) 这就是问题所在!
  • 太棒了!因此,您可以将我的答案标记为正确。问候,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-17
  • 2018-01-13
  • 2016-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多