二进制搜索循环
Binary Search loop
我必须在打字稿中对名称目录进行二进制搜索,如果该名称在数组中,则代码可以正常工作,但如果该名称不在数组中,则会陷入无限循环。
有人可以帮助我吗?请!
这是代码:
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
}
}
你没有考虑变化的限制索引,最后你不知道你是否没有更多的搜索选项或者 findTerm 是否根本不存在。
您只需要更改以下行
while (compare(leftLimit, rightLimit) && leftLimitIndex <= rightLimitIndex) {
此致,
我必须在打字稿中对名称目录进行二进制搜索,如果该名称在数组中,则代码可以正常工作,但如果该名称不在数组中,则会陷入无限循环。
有人可以帮助我吗?请! 这是代码:
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
}
}
你没有考虑变化的限制索引,最后你不知道你是否没有更多的搜索选项或者 findTerm 是否根本不存在。 您只需要更改以下行
while (compare(leftLimit, rightLimit) && leftLimitIndex <= rightLimitIndex) {
此致,