递归二进制搜索 Java
Recursive Binary Search Java
我有一个名为 sArray 的数组列表,其中包含大量正确拼写的单词。我需要向这个递归二进制搜索方法(键)发送一个单词并确定它是否拼写正确。我了解递归二进制搜索的工作原理,但是我不确定如何确定在使用我的关键字搜索 sArray 时是否需要向左或向右移动,因为我正在处理字符串而不是整数。
public int bSearch(String key, int lowIndex, int highIndex) {
if (lowIndex > highIndex) {
System.out.print("The word is incorrect");
return -1;
}
mid = (lowIndex + highIndex) / 2;
if (sArray.get(mid).equals(key)) {
return mid;
} else if (key < sArray.get(mid)) {
return bSearch(key, lowIndex, mid - 1);
} else {
return bSearch(key, mid + 1, highIndex);
}
}
您可以像比较整数一样轻松地比较字符串:
if (testString.compareTo(key) < 0) {
...
} else if (testString.compareTo(key) > 0) {
...
} else {
...
}
compareTo 方法允许您比较任何实现 Comparable 接口的对象。由于 String class 实现了 Comparable 接口,compareTo 将在您的方法中起作用。
使用 compareTo 时要记住的一个小技巧是将其视为减法:
a.compareTo(b) 将 return -1 如果 a - b 导致否定答案。 (订购时 a 在 b 之前)
a.compareTo(b) 将 return 1 如果 a - b 导致肯定答案。 (点菜时a在b之后)
如果 a - b 结果为 0,a.compareTo(b) 将 return 0。(a 和 b 在订购时相同)
所以...
if (key.compareTo(midValue) < 0) {
//look to the left of mid
}...
我有一个名为 sArray 的数组列表,其中包含大量正确拼写的单词。我需要向这个递归二进制搜索方法(键)发送一个单词并确定它是否拼写正确。我了解递归二进制搜索的工作原理,但是我不确定如何确定在使用我的关键字搜索 sArray 时是否需要向左或向右移动,因为我正在处理字符串而不是整数。
public int bSearch(String key, int lowIndex, int highIndex) {
if (lowIndex > highIndex) {
System.out.print("The word is incorrect");
return -1;
}
mid = (lowIndex + highIndex) / 2;
if (sArray.get(mid).equals(key)) {
return mid;
} else if (key < sArray.get(mid)) {
return bSearch(key, lowIndex, mid - 1);
} else {
return bSearch(key, mid + 1, highIndex);
}
}
您可以像比较整数一样轻松地比较字符串:
if (testString.compareTo(key) < 0) {
...
} else if (testString.compareTo(key) > 0) {
...
} else {
...
}
compareTo 方法允许您比较任何实现 Comparable 接口的对象。由于 String class 实现了 Comparable 接口,compareTo 将在您的方法中起作用。
使用 compareTo 时要记住的一个小技巧是将其视为减法:
a.compareTo(b) 将 return -1 如果 a - b 导致否定答案。 (订购时 a 在 b 之前)
a.compareTo(b) 将 return 1 如果 a - b 导致肯定答案。 (点菜时a在b之后)
如果 a - b 结果为 0,a.compareTo(b) 将 return 0。(a 和 b 在订购时相同)
所以...
if (key.compareTo(midValue) < 0) {
//look to the left of mid
}...