diff --git a/Searches/interpolation_search.c b/Searches/interpolation_search.c new file mode 100644 index 00000000..3749bc2d --- /dev/null +++ b/Searches/interpolation_search.c @@ -0,0 +1,44 @@ + +int interpolationSearch(int arr[], int n, int x) +{ + int lo = 0, hi = (n - 1); + + while (lo <= hi && x >= arr[lo] && x <= arr[hi]) + { + + int pos = lo + (((double)(hi-lo) / + (arr[hi]-arr[lo]))*(x - arr[lo])); + + + if (arr[pos] == x) + return pos; + + + if (arr[pos] < x) + lo = pos + 1; + + else + hi = pos - 1; + } + return -1; +} + + +int main() +{ + // Array of items on which search will + // be conducted. + int arr[] = {10, 12, 13, 16, 18, 19, 20, 21, 22, 23, + 24, 33, 35, 42, 47}; + int n = sizeof(arr)/sizeof(arr[0]); + + int x = 18; // Element to be searched + int index = interpolationSearch(arr, n, x); + + // If element was found + if (index != -1) + printf("Element found at index %d", index); + else + printf("Element not found."); + return 0; +}