我正在制作一个使用下面我从维基百科获得的插值搜索的 java 程序。在我的主程序中,我创建了一个包含 100,000 个点的 int 数组。然后我用随机数填充所有这些点并对其进行排序。然后我生成一个随机搜索键并调用该函数。我还每次使用不同的搜索键循环函数调用 100 次。当我这样做时,如果(sortedArray [mid] < toFind),我在这个语句上得到一个数组越界错误。该程序适用于具有 10 个点、100 个点、1000 个点的数组,但是当我达到 100,000 个时,我得到了错误。你知道我能做些什么来解决这个问题吗?
public int interpolationSearch(int[] sortedArray, int toFind){
// Returns index of toFind in sortedArray, or -1 if not found
int low = 0;
int high = sortedArray.length - 1;
int mid;
while (sortedArray[low] <= toFind && sortedArray[high] >= toFind) {
mid = low +
((toFind - sortedArray[low]) * (high - low)) /
(sortedArray[high] - sortedArray[low]);
if (sortedArray[mid] < toFind)
low = mid + 1;
else if (sortedArray[mid] > toFind)
// Repetition of the comparison code is forced by syntax limitations.
high = mid - 1;
else
return mid;
}
if (sortedArray[low] == toFind)
return low;
else
return -1; // Not found
}