- 对二分查找(对于数组是有序)的该进,可以加快查找的速度
- mid=1/2(right-left) ------>mid=left+1/2(right-left)
- mid=low+(findVlue-left)(high-left)/(right-left) (findValue表示要查找的值)
//要判断findValue的范围是在arr[left]到arr[right]之间 不然在mid计算时会出错
public static int InserValueSerachs(int[] arr, int left, int right, int findValue) {
int mid;
System.out.println("count");//统计调用的次数
if (findValue > arr[right] || findValue < arr[left]) {
return -1;
}
while (left <= right) {
mid = left + (findValue - arr[left]) * (arr[right] - arr[left]) / (arr[right] - arr[left]);
if (findValue > arr[mid]) {
left = mid + 1;
InserValueSerachs(arr, left, right, findValue);
} else if (findValue < arr[mid]) {
right = mid - 1;
InserValueSerachs(arr, left, right, findValue);
} else {
return mid;
}
}
return -1;//没有找到
}