【问题标题】:Searching using BinarySearch [closed]使用 BinarySearch 搜索 [关闭]
【发布时间】:2014-05-18 02:13:29
【问题描述】:

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

 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);
    }
}}

【问题讨论】:

  • 1.您的数组中没有名为“Me”的值。 2. 搜索前需要对数组进行排序。
  • 很抱歉,我写的时候忘了排序数组,但同样的事情仍然无法正常工作....关于“ME”的值,我想尝尝它是否会返回未找到...那为什么要搜索?
  • String StudentName[] 不可能是正确的。您的变量 copmarison 拼写错误。您的变量 count 未定义。解决这个问题。

标签: java binary-search


【解决方案1】:

您需要更新 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;
        }
    }
}

【讨论】:

  • 哦,你是对的,非常感谢
【解决方案2】:

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

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

2) 名称为“greater”(按字母顺序排列)。撕掉电话簿的左半边,重新开始。

3) 您正在搜索的名称是“较小的”。撕掉电话簿的右半边,重新开始……

代码有什么问题?

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

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

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

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

【讨论】:

    猜你喜欢
    • 2014-08-26
    • 1970-01-01
    • 2013-06-30
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多