對於java字符串數組上的經典binarySearch(比如String[] a
),這是調用搜索方法的正確方法嗎?是在java中的遞歸二進制搜索中的hi,hi索引
binarySearch(a,key,0,a.length)
或
我都嘗試了以下實施,都似乎工作..有一個用例,其中這兩種調用可能會失敗?
class BS{
public static int binarySearch(String[] a,String key){
return binarySearch(a,key,0,a.length);
//return binarySearch(a,key,0,a.length-1);
}
public static int binarySearch(String[] a,String key,int lo,int hi) {
if(lo > hi){
return -1;
}
int mid = lo + (hi - lo)/2;
if(less(key,a[mid])){
return binarySearch(a,key,lo,mid-1);
}
else if(less(a[mid],key)){
return binarySearch(a,key,mid+1,hi);
}
else{
return mid;
}
}
private static boolean less(String x,String y){
return x.compareTo(y) < 0;
}
public static void main(String[] args) {
String[] a = {"D","E","F","M","K","I"};
Arrays.sort(a);
System.out.println(Arrays.toString(a));
int x = binarySearch(a,"M");
System.out.println("found at :"+x);
}
}
最穩定的方法是'Arrays.binarySearch(a,「M」)'。他們對代碼進行了多次測試,然後我們可以測試我們的代碼。 – jboi