我必须使用循环(while)实现二进制搜索方法。出于一些奇怪的原因(好吧,对我来说很奇怪),即使满足某些条件退出循环,循环也会无限地继续进行。我做错了什么?
public void Bin_search(ArrayList<Integer> arrayList, int targetValue)
{
int totalCount = 0;
int low = 0;
int high = arrayList.size();
while (low <= high)
{
int mid = low + (high - low) / 2;
if(targetValue < arrayList.get(mid))
high = mid - 1;
else if(targetValue > arrayList.get(mid))
low = mid + 1;
else
totalCount++;
}
System.out.println("Number of times "+targetValue+" appears: "+totalCount+" time(s).");
}
答案 0 :(得分:0)
问题在于您的算法。二进制搜索我非常确定该列表既是唯一的又是有序的,并且在找到值时返回/转义循环,或者通过更改最小/最大值来遍历列表。在最后的其他地方,找到值,它所做的就是递增计数器,它永远不会返回(正常的二进制搜索会逃脱循环),也不会更新最小值或最大值,所以你的猜测总是在未来的循环中也一样它总能找到它并且它总是递增但永远不会逃脱,这就是为什么它是一个无限循环,如果找到该值,但如果找不到该值它将逃脱循环。