簡體   English   中英

對給出錯誤值的數組進行二分搜索

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM