为什么我的二进制搜索陷入无限循环?
Why is my Binary search stuck in an endless loop?
我不得不突然出现在这里,希望能快速回答我的小问题。我正在尝试创建一个二进制搜索方法,但 运行 遇到了一些问题。我反复创建它,我的 IDE(Intellij) 显然不喜欢。它让我陷入了一个无休止的循环......好吧,你知道其余的。有什么建议吗?
这是我的简单但漂亮的小代码片段:
static int searchIt(int[] arr, int target){
int left = 0;
int right = arr.length - 1;
while (left <= right){
int mid = (right + left) / 2;
if(arr[mid] == target) {
return mid;
} else if(target < arr[mid]){
right = mid-1;
} else{
left = mid -1;
}
}
return -1;
}
没有错误,不是在运行时或编译时,只是无尽的虚无...
左边的值应该是 mid + 1
,因为如果中间的目标值大于中间值,那么您需要在数组的后半部分搜索元素
static int searchIt(int[] arr, int target){
int left = 0;
int right = arr.length - 1;
while (left <= right){
int mid = (right + left) / 2;
if(arr[mid] == target) {
return mid;
} else if(target < arr[mid]){
right = mid - 1;
} else{
left = mid + 1;
}
}
return -1;
}
我不得不突然出现在这里,希望能快速回答我的小问题。我正在尝试创建一个二进制搜索方法,但 运行 遇到了一些问题。我反复创建它,我的 IDE(Intellij) 显然不喜欢。它让我陷入了一个无休止的循环......好吧,你知道其余的。有什么建议吗?
这是我的简单但漂亮的小代码片段:
static int searchIt(int[] arr, int target){
int left = 0;
int right = arr.length - 1;
while (left <= right){
int mid = (right + left) / 2;
if(arr[mid] == target) {
return mid;
} else if(target < arr[mid]){
right = mid-1;
} else{
left = mid -1;
}
}
return -1;
}
没有错误,不是在运行时或编译时,只是无尽的虚无...
左边的值应该是 mid + 1
,因为如果中间的目标值大于中间值,那么您需要在数组的后半部分搜索元素
static int searchIt(int[] arr, int target){
int left = 0;
int right = arr.length - 1;
while (left <= right){
int mid = (right + left) / 2;
if(arr[mid] == target) {
return mid;
} else if(target < arr[mid]){
right = mid - 1;
} else{
left = mid + 1;
}
}
return -1;
}