【发布时间】:2012-07-02 15:08:05
【问题描述】:
在数组中进行二进制搜索的最佳方法是什么?通过间接访问?
意思是我有一个Integer[] 存储String[] 的索引,代表String[] 的排序版本
例如。 Integer[] idxes= {5, 4, 0, 3 , 1, 2} 这意味着 String[5] 或 String[idxes[0]] 在字典上是最低的字符串。
我希望描述清楚。
如果 String 是 String[] words 的一部分,那么通过 idexes 对 String 进行二进制搜索的最佳方法是什么?
我所做的如下:
int pos = Arrays.binarySearch(idexes, -1, new Comparator<Integer>(){
@Override
public int compare(Integer o1, Integer o2) {
if(o1 == -1){
return k.compareTo(words[o2]);
}
else{
return words[o1].compareTo(k);
}
}
});
其中k 是搜索词,words[] 是我之前提到的String[]。
这可行,但我不喜欢 -1 我传入 binarySearch api。
有没有更好的方法来解决这个问题?
【问题讨论】:
-
从技术上讲不是一个答案,但将字符串数组和索引数组封装到它自己的类中至少可以帮助将这个实现细节隐藏在应用程序的其余部分。我也不认为这很糟糕,它看起来不太好,但它相对简单,尤其是添加了一些解释原理的 cmets。
-
话虽如此,如果你经常搜索同一个数组,你最好创建一个排序的副本。
标签: java arrays string algorithm binary-search