diff --git a/Searching-algorithms/Interpolationsearch.java b/Searching-algorithms/Interpolationsearch.java index cb12f1b..644e637 100644 --- a/Searching-algorithms/Interpolationsearch.java +++ b/Searching-algorithms/Interpolationsearch.java @@ -56,7 +56,13 @@ public static int interpolationSearch(int arr[], int lo, int hi, int x) { return lo; return -1; } - pos = lo + ((hi - lo) * (x - arr[lo])) / (arr[hi] - arr[lo]); + long numerator = (long) (hi - lo) * (x - arr[lo]); + long denominator = (long) (arr[hi] - arr[lo]); + long posLong = lo + (numerator / denominator); + if (posLong < lo || posLong > hi) { + return -1; + } + pos = (int) posLong; if (arr[pos] == x) return pos; if (arr[pos] < x)