package com.yg.search;/*
@author Mu_Mu
@date 2020/3/1 10:08
*/
public class InsertValueSearch {
public static void main(String[] args) {
int arr[] = new int[100];
for (int i = 0; i < 100; i++) {
arr[i] = i + 2;
}
int index = insertValueSearch(arr, 0, arr.length - 1,3 );
System.out.println("index:" + index);
}
//插值排序需要有序序列,原理是斜率,对于每个元素间隔相同的序列一次就可以找到
//找第一个元素和最后一个元素也可以直接找到
private static int insertValueSearch(int[] arr, int left, int right, int findVal) {
if (left > right || findVal < arr[0] || findVal > arr[arr.length - 1]) {
return -1;
}
int mid = left + (right - left) * (findVal - arr[left]) / (arr[right] - arr[left]);
//小于arr【mid】说明findVal在mid的左边
if (findVal < arr[mid]) {
return insertValueSearch(arr, left, mid - 1, findVal);
} else if (findVal > arr[mid]) { //大于arr【mid】说明findVal在mid的右边边
return insertValueSearch(arr, mid + 1, right, findVal);
} else {
return mid;
}
}
}
来源:CSDN
作者:Mu_Mu是一只小白
链接:https://blog.csdn.net/lin1214000999/article/details/104590998