1.補間検索とは
順序付けされたリストの検索方法である補間検索。補間検索は、検索キーと、検索テーブル内の最大および最小のレコードキーとの比較に基づく検索方法です。内挿検索はバイナリ検索に基づいています。これにより、適応的な選択に対する検索ポイントの選択が改善され、検索効率が向上します。
2.アルゴリズムの要件
- ルックアップテーブルは、順番に格納された順序付けられたテーブルです。
- データ要素のキーワードはルックアップテーブルに均等に分散されます
第三に、検索プロセス
バイナリ検索と同様に、補間検索は適応選択ポイントから開始されるという違いがあります
- 表の要素が昇順で配置されていると仮定して、表の中央に記録されているキーワードを検索キーワードと比較します。2つが等しい場合、検索は成功です。
- それ以外の場合は、中央の値と特定のアルゴリズム位置を使用して、テーブルを2つのサブテーブルに分割します。中央の位置に記録されたキーが検索キーより大きい場合、前のサブテーブルがさらに検索され、それ以外の場合は、次のサブテーブルがさらに検索されます。
- 検索が成功するように条件を満たすレコードが見つかるまで、または子テーブルが存在せず、現時点では検索が成功しなくなるまで、上記のプロセスを繰り返します。
4、コードの実装
public class InsertValueSearch {
public static void main(String[] args) {
int[] array = new int[100];
for (int i = 0; i < 100;i++){
array[i] = i+1;
}
int resultIndex = insertValueSearch(array,0,array.length-1,86);
System.out.println("下标为:"+resultIndex);
}
/**
* @param arrays 有序数组
* @param left 最小索引
* @param right 最大索引
* @param findValue 查找值
* @return 查找值的下标
*/
public static int insertValueSearch(int[] arrays,int left,int right,int findValue){
//判断是否继续进行
if(left > right || findValue < arrays[0] || findValue > arrays[arrays.length-1]){
return -1;
}
//自适应查找mid
int mid = left + (right - left) * (findValue - arrays[left]) / (arrays[right] - arrays[left]);
int midValue = arrays[mid];
//查找值大于标志值则向右递归查询
if(findValue > midValue){
return insertValueSearch(arrays, mid + 1, right, findValue);
}
else if(findValue < midValue){
return insertValueSearch(arrays, left, mid - 1, findValue);
}
else{
return mid;
}
}
}