gpt4 book ai didi

java - 我的二分查找出了什么问题?

转载 作者:行者123 更新时间:2023-12-01 23:15:13 24 4
gpt4 key购买 nike

我刚刚开始学习Java(这是我第一次用Java 编程)。在 print 语句所在的位置(纯粹用于测试目的),代码会重复输出 mid 而不会更改它。我想了好几个小时,还是想不出来。帮助将不胜感激。

/*class containing binary search algorithm*/
public class BinarySearch {
/*conducts a binary search as specified by user*/
public static int binarySearch(int queryValue, int[] list) {
int length = list.length;
/*last point of list*/
int top = length-1;
/*first point of list*/
int bottom = 0;
/*starting midpoint of list*/
int mid = (int)Math.round((top + bottom)/2);
/*binary search*/
while(bottom < top) {
if((int)queryValue == (int)list[mid]) {
return mid;
}
else if(queryValue > list[mid]) {
bottom = mid;
mid = (int)Math.round((top + bottom) / 2);
StdOut.print(mid);
}
else {
top = mid;
mid = (top + bottom) / 2;
}
}
/*returns -1 if user value not found*/
return -1;
}
}

最佳答案

如果您的值大于中点,则中点将被消除。将 bottom 前进到当前 mid 之后:

bottom = mid + 1;

类似地,对于小于中点的情况,将 top 在当前 mid 之前前进:

top = mid - 1;

否则,您可能会遇到 bottomtop 永远不会相互交叉的情况。

此外,二分搜索仅在输入已排序时才有效。请确认/确保您的数组已排序。

关于java - 我的二分查找出了什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21345089/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com