二进制搜索数组给出错误的值

时间:2017-12-28 19:02:04

标签: java algorithm binary-search

我在数组上进行二进制搜索。但有些事情要关闭。它返回-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);
        }  
    }

}

2 个答案:

答案 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
相关问题