バイナリ検索は、ソートされたリストで機能することを目的としていることに注意してください。したがって、重複のあるソート済みリストがある場合、バイナリ検索は重複が隣接している場合にのみ役立ちます。隣接していることの重要性は、見つかったキーの前後の位置でキーの存在をテストできるようにすることです。ソートされていないリストでバイナリ検索を使用しようとする他の方法では、誤った結果が得られます。
これが私が何を意味するかを示すための少しのコードです。
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] list = {1, 2, 3, 4, 5, 6, 7, 7, 8, 9 };
int key = 7;
int result = Arrays.binarySearch(list, key);
System.out.println(result);
if( list[result+1] == key || list[result-1] == key )
System.out.println("yes we have a duplicate.");
}
}
O(1)であることの比較は、if
二分探索のO(logn)と残っています。