我在数组上进行二进制搜索。但有些事情要关闭。它返回-1,好像没有找到目标但是它在数组中。 例如:当我把键放在555时,它会返回正确的索引但是当我尝试使用下面的例子时,它返回-1 ..
public class bSearch {
public static void main(String[] args) {
int[] nums = {9,5,2,5,7,8,3,22,555};
int key = 8;
System.out.println(searchForNum(nums,0,nums.length-1,key));
}
private static int searchForNum(int[] arr,int first, int last, final int target) {
int middle= (first+last)/2;
if(last < first) {
return -1;
}
if(arr[middle]== target)
return middle;
else if(target < arr[middle]) {
return searchForNum(arr,first,middle-1,target);
} else {
return searchForNum(arr,middle+1,last,target);
}
}
}
答案 0 :(得分:11)
二进制搜索的工作原理是搜索间隔是有序的。您正在传递无序间隔,这会导致搜索错误。
在搜索之前调用数据阵列上的Arrays.sort
:
int[] nums = {9,5,2,5,7,8,3,22,555};
Arrays.sort(nums);
答案 1 :(得分:0)
您无法执行二进制搜索而不对要在其上搜索的列表/数组进行排序
请阅读此内容以获取更多信息binary-search。
您需要将public static void main(String [] args) throws Exception {
final Class<?> aClass = Integer.class;
final List<Class<?>> trivialListOfClasses = Program.list(aClass);
}
public static final <T> List<T> list(T t) {
final List<T> rv = new ArrayList<>();
rv.add(t);
return rv;
}
方法修改为
main