二分搜索算法的问题

时间:2015-02-19 14:12:33

标签: java algorithm

二进制搜索算法无法正确分析数据,例如,在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 ");

    }
}

2 个答案:

答案 0 :(得分:5)

清除RTFM的情况; - )

来自文档:

  

必须对数组进行排序

所以请在搜索之前这样做; - )

答案 1 :(得分:3)

二进制搜索要求对数据进行排序。这就是为什么它不适用于

等输入
{10,20,30,40,1}

原因是二元搜索将从中间开始。如果搜索到的元素小于中间元素,它将继续搜索左半部分。当算法无法在左半部分找到值时,它将假定该值不存在于数组中。