插值查找

代码实现

  1. /**
  2. * @author laoduan
  3. * @create 2020-05-10-18:30
  4. */
  5. public class InsertValueSearch {
  6. public static void main(String[] args) {
  7. int [] arr = new int[100];
  8. for(int i = 0;i<100;i++){
  9. arr[i]= i+1;
  10. }
  11. }
  12. public static int insertValueSearch(int [] arr,int left,int right,int findVal){
  13. //注意:findVal<arr[0] || findVal>arr[arr.length-1]是必须存在的
  14. //否则mid可能越界
  15. if(left>right || findVal<arr[0] || findVal>arr[arr.length-1]){
  16. return -1;
  17. }
  18. int mid = left +(right-left) *(findVal-arr[left])/(arr[right]-arr[left]);
  19. int midVal =arr[mid];
  20. if(findVal>midVal){
  21. //说明应该向右递归
  22. return insertValueSearch(arr,mid+1,right,findVal);
  23. }else if(findVal<midVal){
  24. return insertValueSearch(arr,left,mid-1,findVal);
  25. }else {
  26. return mid;
  27. }
  28. }
  29. }