2015-02-12 114 views
0

我有一个名为sArray的数组列表,它包含正确拼写单词的大量列表。我需要发送一个单词到这个递归二进制搜索方法(键),并确定它是否拼写正确。我理解递归二分法搜索是如何工作的,但我不确定如何确定是否需要左键或右键搜索与关键字相关的sArray,因为我正在处理字符串而不是整数。递归二进制搜索Java

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

回答

0

CompareTo方法可以比较的是实现了Comparable接口的对象。由于String类实现了Comparable接口,因此compareTo将在您的方法中起作用。

一个方便的技巧,在使用的compareTo就像是减法思维它记住:

a.compareTo(二)将返回-1如果 - 否定的回答b。结果。 (a)在订购它们之前出现b)

a.compareTo(b)如果a-b导致肯定答案,则返回1。 (订购时他们谈到b)后

a.compareTo(二)将返回0,如果一个 - B的结果为0(有序当A和B是相同的)

所以......

if (key.compareTo(midValue) < 0) { 

     //look to the left of mid 
}... 
0

你可以很容易地比较字符串作为整数:

if (testString.compareTo(key) < 0) { 
    ... 
} else if (testString.compareTo(key) > 0) { 
    ... 
} else { 
    ... 
}