【发布时间】:2020-04-29 18:04:06
【问题描述】:
在编写我的第一个二分搜索方法时遇到问题。
public static int binarySearch(int [] a, int b){
int mid = a[a.length-1]-a[0]/2;
int high = a[a.length-1];
int low = a[0];
int found = -2;
while (high > low){
for (int i = high; i >= mid; i--){
if (a[i] == b){
found = i;
}
}
for (int x = 0; x <= mid; x++){
if (a[x] == b){
found = x;
}
}
if (a[mid] < b){
low = mid;
mid = high-low/2;
} else if (a[mid] > b){
high = mid;
mid = high-low/2;
} else if (a[mid] == b){
found = mid;
}
}
return found;
}
我在跑步者的调用语句中收到一个索引越界错误。我一直在搞乱 for 循环,但我什至不确定这是怎么回事。
【问题讨论】:
-
看起来您的
low、mid和high变量已初始化为从数组中读取的值。它们应该是索引。 -
也不确定两个
for循环发生了什么。这些不属于典型的二分搜索算法。
标签: java for-loop while-loop binary-search