适用于有序序列分布比较均匀数据。
import java.util.Arrays; public class InsertValueSearch { public static void main(String[] args) { int[] arr = new int[100]; for (int i = 0; i < arr.length; i++) { arr[i] = i + 1; } System.out.println(Arrays.toString(arr)); System.out.println(insertValueSearch(arr, 0, arr.length - 1, 1)); System.out.println(insertValueSearch(arr, 0, arr.length - 1, 99)); System.out.println(insertValueSearch(arr, 0, arr.length - 1, 25)); } /** * 插值查找算法,使用有序序列,分布比较均匀 * * @param arr 数组 * @param left 左下标 * @param right 右下标 * @param findVal 查找的值 * @return */ public static int insertValueSearch(int[] arr, int left, int right, int findVal) { if (left > right || findVal > arr[arr.length - 1] || findVal < arr[0]) { return -1; } // 求出mid int mid = left + (right - left) * (findVal - arr[left]) / (arr[right] - arr[left]); int midVal = arr[mid]; if (findVal > midVal) { //向右递归 return insertValueSearch(arr, mid + 1, right, findVal); } else if (findVal < midVal) { //向左递归 return insertValueSearch(arr, left, mid - 1, findVal); } else { return mid; } } }