二分搜索算法的问题

Sha*_*buj -1 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));
    }       
}
Run Code Online (Sandbox Code Playgroud)

当我的数组元素为{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 ");

    }
}
Run Code Online (Sandbox Code Playgroud)

Uni*_*rsE 5

清除RTFM案例;-)

从文档:

必须对数组进行排序

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