3 回答
TA贡献1886条经验 获得超2个赞
二分查找的逻辑是合理的。唯一的问题是您忘记将每次递归调用的结果分配给index和found。
目前你有这些递归调用:
BinarySearch(data, target, low, mid - 1)
//...
BinarySearch(data, target, mid + 1, high)
您只需要分配结果:
index, found = BinarySearch(data, target, low, mid - 1)
//...
index, found = BinarySearch(data, target, mid + 1, high)
TA贡献2019条经验 获得超9个赞
二分查找的逻辑
目标是在数组中搜索一个项目。
获取数组的中间项。
如果超过所需值 => 第一项直到最后一项。
如果小于所需值 => 中间项目直到结束项目
重复过程
我们使用递归或循环来实现这一点。
使用递归进行二分查找
函数将包含一个数组,我们将在其中进行搜索。那么目标值等于我们要搜索的值。lowIndex
将指示我们搜索的开始。highIndex
表示我们搜索的最后一个位置。
然后函数返回我们正在搜索的目标值的位置。在参数中
包含lowIndex
和的原因highIndex
是搜索数组的子集。
func binarySearch(array []int, target int, lowIndex int, highIndex int) int {
//specify condition to end the recursion
if highIndex < lowIndex {
return -1
}
// Define our middle index
mid := int((lowIndex + highIndex) / 2)
if array[mid] > target {
return binarySearch(array, target, lowIndex,mid)
}else if array[mid] < target {
return binarySearch(array, target,mid+1,highIndex)
}else {
return mid
}
}
使用循环进行二分查找
func iterbinarySearch(array []int, target int, lowIndex int, highIndex int) int {
startIndex := lowIndex
endIndex := highIndex
var mid int
for startIndex < endIndex {
mid = int((lowIndex + highIndex) / 2)
if array[mid] > target {
return binarySearch(array, target, lowIndex, mid)
} else if array[mid] < target {
return binarySearch(array, target, mid+1, highIndex)
} else {
return mid
}
}
return -1
}
- 3 回答
- 0 关注
- 191 浏览
添加回答
举报