我必须通过特定键(使用二进制搜索方法)找到第一个和最后一个元素。我已经完成了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;
}
我找不到这个错误也许你可以帮助我...有时候代码找到最后一个有时它不会...
答案 0 :(得分: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;
}