二进制搜索算法无法正确分析数据,例如,在eclipse中编写的以下代码无法为某些特定输入提供正确的输出。当我想从数组中找到最后一个元素时,会发生错误结果。
例如,我有一个包含5个元素{10,20,30,40,1}
的数组
如果我想检查1是否在数组中,那么下面的代码不能给我正确的结果?以下两个代码无法正常工作,请解释
import java.util.Arrays;
public class demo2 {
public static void main(String sabuj[]){
int[] character = {10,20,30,40,1};
System.out.println(Arrays.binarySearch(character, 1));
}
}
当我的数组元素为{10,20,30,40,50
}时,上面和下面的代码会正确分析数据,我想搜索50
,例如:
import java.util.Scanner;
public class demo {
public static void main(String sabuj[]) {
int c, first, last, middle, n, search, array[];
Scanner in = new Scanner(System.in);
System.out.println("Enter number of elemnts: ");
n = in.nextInt();
array = new int[n];
System.out.println("Enter " + n + " Elements");
for (c = 0; c < n; c++) {
array[c] = in.nextInt();
}
System.out.println("Enter a value to Find from the Elements ");
search = in.nextInt();
first = 0;
last = n - 1;
middle = (first + last) / 2;
while (first <= last) {
if (array[middle] < search)
first = middle + 1;
else if (array[middle] == search) {
System.out.println(search + " found at location "
+ (middle + 1) + ".");
break;
} else
last = middle - 1;
middle = (first + last) / 2;
}
// if (first > last)
System.out.println(search + " is not present in the list ");
}
}
答案 0 :(得分:5)
清除RTFM的情况; - )
来自文档:
必须对数组进行排序
所以请在搜索之前这样做; - )
答案 1 :(得分:3)
二进制搜索要求对数据进行排序。这就是为什么它不适用于
等输入{10,20,30,40,1}
原因是二元搜索将从中间开始。如果搜索到的元素小于中间元素,它将继续搜索左半部分。当算法无法在左半部分找到值时,它将假定该值不存在于数组中。