使用BinarySearch搜索

时间:2014-05-17 17:49:04

标签: java binary-search

我尝试运行此代码以使用二进制搜索来搜索名称,但它无效。 这段代码或方法出了什么问题?

 public static int BinarySearchForStudentsName(String StudentName[],String Name) {
    int left = 0;
    int right = count - 1;
    int middle;
    while (true) {
        middle = (left + right) / 2;
        int copmarison = Name.compareTo(StudentName[middle]);
        if (Name.equals(StudentName[middle])) {
            return middle;
        } else if (left > right) {
            return count;
        } else {
            if (copmarison > 0) {
                middle = middle + 1;
            } else {
                middle = middle - 1;
            }
        }
    }
}
    public static void main(String[] args) {
String a[]={"A","B","C","D"};
int index = BinarySearchForStudentsName(a,"M");
    if (index == count) {
        System.out.println("not found");
    } else {
        System.out.println("founded at " + index);
    }
}}

2 个答案:

答案 0 :(得分:0)

您需要更新leftright值,而不是middle ..更改此内容

while (true) {
    middle = (left + right) / 2;
    int copmarison = Name.compareTo(StudentName[middle]);
    if (Name.equals(StudentName[middle])) {
        return middle;
    } else if (left > right) {
        return count;
    } else {
        if (copmarison > 0) {
            left = middle + 1;
        } else {
            right = middle - 1;
        }
    }
}

答案 1 :(得分:0)

寻找名字,你拿一本电话簿。在正中间打开它。有三种可能性:

1)你很幸运,你找到了名字,搜索结束。

2)名称为“更大”(按字母顺序排列)。撕掉电话簿的左半部分并重新启动。

3)您要搜索的名称是“较小”。扯掉电话簿的右半部分,重新​​开始......

代码出了什么问题?

1)BinarySearch需要一个排序数组:

String a[]={"Aureliano","Cruise","Hatchi","Zaboumba"};

2)'compareTo'的返回值应指导搜索,而不是比较为“left> right”。 “CompareTo”返回0,或返回一些< 0,或返回一些> 0

3)如果搜索到的名称不存在,则在某些时候电话簿中不会留下任何页面。同样,你的代码不应该使用无限循环:而不是'while(true)',考虑一个涉及变量'left'和'right'的条件。