首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >二分搜索循环

二分搜索循环
EN

Stack Overflow用户
提问于 2020-04-15 09:17:19
回答 1查看 43关注 0票数 1

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

有人能帮帮我吗?请!代码如下:

代码语言:javascript
复制
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 
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-15 09:54:06

您没有考虑到更改的限制索引,最终您不知道是没有更多的选项可供搜索,还是findTerm根本不存在。您只需更改以下行

代码语言:javascript
复制
while (compare(leftLimit, rightLimit) && leftLimitIndex <= rightLimitIndex) {

致以敬意,

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61219785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档