0

我必须通过特定键(使用二进制搜索方法)找到第一个和最后一个元素。我已经完成了 searchFirst 方法,但我无法完成 searchLast 方法。有时它起作用,有时它不起作用(这取决于我正在寻找的价值),这就是问题所在。

我有一个 Data 类,其中包含一些属性,如时间戳、名称、产品等,我从文本文件中读取。当我完成填充数据数组时,我使用合并排序对数组进行排序。

然后我需要特定名称的数组的第一个和最后一个元素。

searchFirst 方法完美,但 searchLast 不会做我想要的。

这是 searchLast 方法的代码(n 是他应该查找的值,w 目前不使用)。

public static int searchLast(Data[] array, String n, String w) {
        int left = 0;
        int right = array.length - 1;
        int m = -1;

        while (left < right) {
            m = (left + right) / 2;
            if (array[m].getName().compareTo(n) > 0) {
                right = m - 1;
            } else {
                left = m + 1;
            }
        }

        if (m >= 0) {
            if (array[right].getName().equals(n)) {
                return right;
            }
        }

        return NO_KEY;
    }

我找不到错误也许你可以帮助我......有时代码找到最后一个有时它没有......

4

1 回答 1

0
public static int searchLast(Data[] array, String n, String w) {
        int left = 0;
        int right = array.length - 1;
        int m = -1;
        int found = -1;

            while (left < right) {
                m = (left + right) / 2;
                if (array[m].getName().compareTo(n) > 0) {
                    right = m - 1;
                } else if (array[m].getName().compareTo(n) < 0){
                    left = m + 1;
                } else {
                    found = m;
                    left = m + 1;
            }

        return found;
    }
于 2013-04-23T19:30:54.383 回答