Java 使用递归二进制搜索进行拼写检查
我有一个递归的二进制搜索拼写检查方法。萨雷在《英格兰词典》中有一个词表。关键字是您可以发送的任何单词。该方法将获取任何wordkey,并使用递归二进制搜索在字典sArray中查找它 我想不出如何正确地浏览字典中的每一个单词。可以找到诸如project和test之类的词,但是找不到诸如the和by之类的词。我知道这与我的递归步骤有关,但是我无法根据比较找出正确的递归步骤Java 使用递归二进制搜索进行拼写检查,java,recursion,binary-search-tree,Java,Recursion,Binary Search Tree,我有一个递归的二进制搜索拼写检查方法。萨雷在《英格兰词典》中有一个词表。关键字是您可以发送的任何单词。该方法将获取任何wordkey,并使用递归二进制搜索在字典sArray中查找它 我想不出如何正确地浏览字典中的每一个单词。可以找到诸如project和test之类的词,但是找不到诸如the和by之类的词。我知道这与我的递归步骤有关,但是我无法根据比较找出正确的递归步骤 public int bSearch(ArrayList<String> sArray, String key, i
public int bSearch(ArrayList<String> sArray, String key, int lowIndex, int highIndex) {
if (lowIndex > highIndex) {
System.out.println("The word was not found ");
return -1;
}
mid = (lowIndex + highIndex) / 2;
if (sArray.get(mid).equalsIgnoreCase(key)) {
System.out.println("WORD FOUND");
return mid;
} else if (sArray.get(mid).compareTo(key) > 0) {
return bSearch(sArray, key, lowIndex, mid - 1);
} else {
return bSearch(sArray, key, mid + 1, highIndex);
}
您确定“the”在ArrayList中吗?仅供参考,您可以查看内置的Arrays.binarySearch。教科书中的错误是数组需要排序。另外,您使用的是equalsIgnoreCase,但不是CompareTognoreCase,需要对“忽略的大小写”进行排序。如果没有进一步的信息,我的第一个猜测是您的ArrayList排序不正确。你能提供一个更详细的例子吗?编辑:看起来Dan比我快。ArrayList是按字母顺序排序的,你认为我在递归调用中没有加/减mid吗?