[英]Binary search on an array giving wrong value
我正在對數組進行二分搜索。 但有些事情要關閉。 它返回-1,就好像沒有找到目標但它在數組中。 例如:當我將密鑰放在 555 時,它返回正確的索引,但是當我嘗試使用下面的 8 示例時,它返回 -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);
}
}
}
二分查找之所以起作用,是因為查找間隔是有序的。 您正在傳遞一個無序的間隔,這會導致搜索錯誤。
在搜索之前對數據數組調用Arrays.sort
:
int[] nums = {9,5,2,5,7,8,3,22,555};
Arrays.sort(nums);
如果不對要搜索的列表/數組進行排序,就不能進行二分搜索
請閱讀本文以獲取更多信息binary-search 。
你需要修改你的main
方法
public static void main(String[] args) {
int[] nums = {9,5,2,5,7,8,3,22,555};
int key = 8;
Arrays.sort(nums); // sort the array
System.out.println(searchForNum(nums,0,nums.length-1,key));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.