目的はキーと配列項目の間の比較の数を返すことです。 私はJavaに慣れていて、ベストプラクティスを十分に理解していないので、私が変更すべきことがあれば教えてください。Javaバイナリとリニア検索アルゴリズムは正しく動作していますか?
public class BinaryVsLinear {
private static int linearSearch(int key, int[] array){
int count = 0;
for (int i = 0; i < array.length; i++){
count++;
if (array[i] == key){
i += array.length +1;
}
}
return count;
}
private static int binarySearch(int key, int[] array){
int count = 0, l = 0, r = array.length -1;
while (l <= r){
int m = (l+r)/2;
count++;
if (array[m] == key){
return count;
}
count++;
if (array[m] < key){
l = m + 1;
}
else{
r = m - 1;
}
}
return count;
}
どちらの入力もソートされていますか?バイナリ検索はソートされたデータに対してのみ機能し、ソートされたデータを処理している場合は線形検索を高速化できます(array [i]>キーのときに戻る) – phflack
はい、両方の入力がソートされます。 –