二进制搜索将无法正常运行
Binary Search won't operate correctly
我正在为我的动态数组 class 编写多重搜索算法,并尝试执行二分搜索,但我的程序无法正确设置整数 mid
的值.
方法代码如下:
public static boolean search(int[] array, int value) {
int first = 0, last = array.length - 1, mid = ((first + last) / array.length);
System.out.println(first + " - " + mid + " - " + last);
while(true) {
System.out.println(first + " - " + mid + " - " + last);
if (value == array[mid]) {return true;}
if (first == last || mid == last || mid == first) {return false;}
if (value > array[mid]) {
first = mid;
mid = (first + last) / (last + 1);
}
if (value < array[mid]) {
last = mid;
mid = (first + last) / (last + 1);
}
System.out.println(first + " - " + mid + " - " + last);
}
}
我运行程序有数百个测试,然而,mid的值始终为0(输出为0 - 0 - 111725
或0 - 0 - 127
或0 - 0 - 15
)。
非常感谢所有帮助!
不应该:
mid = ((first + last) / array.length)
...其实是这样的
mid = ((first + last) / 2)
... 而不是让您获得 mid
?
要获得 2 个值的中间值,您需要将两个值相加 并除以 2.
确保你的数组是升序顺序:
public static boolean search(int[] array, int value) {
int first = 0, last = array.length - 1, mid = ((first + last) / 2); //Divide by 2
System.out.println(first + " - " + mid + " - " + last);
while(true) {
System.out.println(first + " - " + mid + " - " + last);
if (value == array[mid]) {return true;}
if (first == last || mid == last || mid == first) {return false;}
if (value > array[mid]) {
first = mid;
mid = (last + first) / 2; //Divide by 2
}
if (value < array[mid]) {
last = mid;
mid = (first + last) / 2; //Divide by 2
}
System.out.println(first + " - " + mid + " - " + last);
}
}
我正在为我的动态数组 class 编写多重搜索算法,并尝试执行二分搜索,但我的程序无法正确设置整数 mid
的值.
方法代码如下:
public static boolean search(int[] array, int value) {
int first = 0, last = array.length - 1, mid = ((first + last) / array.length);
System.out.println(first + " - " + mid + " - " + last);
while(true) {
System.out.println(first + " - " + mid + " - " + last);
if (value == array[mid]) {return true;}
if (first == last || mid == last || mid == first) {return false;}
if (value > array[mid]) {
first = mid;
mid = (first + last) / (last + 1);
}
if (value < array[mid]) {
last = mid;
mid = (first + last) / (last + 1);
}
System.out.println(first + " - " + mid + " - " + last);
}
}
我运行程序有数百个测试,然而,mid的值始终为0(输出为0 - 0 - 111725
或0 - 0 - 127
或0 - 0 - 15
)。
非常感谢所有帮助!
不应该:
mid = ((first + last) / array.length)
...其实是这样的
mid = ((first + last) / 2)
... 而不是让您获得 mid
?
要获得 2 个值的中间值,您需要将两个值相加 并除以 2.
确保你的数组是升序顺序:
public static boolean search(int[] array, int value) {
int first = 0, last = array.length - 1, mid = ((first + last) / 2); //Divide by 2
System.out.println(first + " - " + mid + " - " + last);
while(true) {
System.out.println(first + " - " + mid + " - " + last);
if (value == array[mid]) {return true;}
if (first == last || mid == last || mid == first) {return false;}
if (value > array[mid]) {
first = mid;
mid = (last + first) / 2; //Divide by 2
}
if (value < array[mid]) {
last = mid;
mid = (first + last) / 2; //Divide by 2
}
System.out.println(first + " - " + mid + " - " + last);
}
}