ウィキペディアから取得した以下の補間検索を使用する Java プログラムを作成しています。私のメイン プログラムでは、100,000 スポットを持つ int 配列を作成しました。次に、それらすべてのスポットを乱数で埋めて並べ替えます。次に、ランダムな検索キーを生成し、関数を呼び出します。また、異なる検索キーを使用して、関数呼び出しを毎回 100 回ループしています。これを行うと、このステートメント if (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
}