Цикл бинарного поиска - PullRequest
0 голосов
/ 15 апреля 2020

Я должен выполнить бинарный поиск каталога имен в машинописи, если имя в массиве, код работает правильно, но если имя не в массиве, оно становится бесконечным l oop.

Кто-нибудь может мне помочь? Пожалуйста! Это код:

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 
    }
}

1 Ответ

0 голосов
/ 15 апреля 2020

Вы не учитываете изменяющийся индекс лимитов, и в конце концов вы не знаете, если у вас больше нет вариантов поиска или если findTerm вообще не завершается. Вам нужно только изменить следующую строку

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

С уважением,

...