From 665c6f1fb2aeae49ba6c1536152225460bdb5e07 Mon Sep 17 00:00:00 2001 From: theycallmemac Date: Thu, 28 Sep 2017 21:29:36 +0100 Subject: [PATCH] added interpolationSearch.java --- Searches/interpolationSearch.java | 53 +++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 Searches/interpolationSearch.java diff --git a/Searches/interpolationSearch.java b/Searches/interpolationSearch.java new file mode 100644 index 00000000..b8041ae6 --- /dev/null +++ b/Searches/interpolationSearch.java @@ -0,0 +1,53 @@ + +class Test +{ + // Array of items on which search will + // be conducted. + static int arr[] = new int[]{10, 12, 13, 16, 18, 19, 20, 21, 22, 23, + 24, 33, 35, 42, 47}; + + // If x is present in arr[0..n-1], then returns + // index of it, else returns -1. + static int interpolationSearch(int x) + { + // Find indexes of two corners + int lo = 0, hi = (arr.length - 1); + + // Since array is sorted, an element present + // in array must be in range defined by corner + while (lo <= hi && x >= arr[lo] && x <= arr[hi]) + { + // Probing the position with keeping + // uniform distribution in mind. + int pos = lo + (((hi-lo) / + (arr[hi]-arr[lo]))*(x - arr[lo])); + + // Condition of target found + if (arr[pos] == x) + return pos; + + // If x is larger, x is in upper part + if (arr[pos] < x) + lo = pos + 1; + + // If x is smaller, x is in lower part + else + hi = pos - 1; + } + return -1; + } + + // Driver method + public static void main(String[] args) + { + int x = 18; // Element to be searched + int index = interpolationSearch(x); + + // If element was found + if (index != -1) + System.out.println("Element found at index " + index); + else + System.out.println("Element not found."); + } +} +