Update interpolation_search.c

1) Easy logic built
2) error minimized: as array is increasing in above example it might not always be increasing.just replace 47 by 2 then run above program it will give an incorrect ans. but in improvised case it is minimized.
3)we are scanning input from user so, more saturated
4)'position' is more reliable than 'index'.
This commit is contained in:
akshayanvi 2018-03-14 03:08:07 +05:30 committed by GitHub
parent 331e6e58d5
commit 8d240037b3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,24 +1,12 @@
#include<stdio.h>
int interpolationSearch(int arr[], int n, int x)
{
int lo = 0, hi = (n - 1);
while (lo <= hi && x >= arr[lo] && x <= arr[hi])
{
int q=NULL;
while(q<n)
{
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;
if(arr[q]==x)
return q;
q++;
}
return -1;
}
@ -28,16 +16,19 @@ int main()
{
// Array of items on which search will
// be conducted.
int x;
int arr[] = {10, 12, 13, 16, 18, 19, 20, 21, 22, 23,
24, 33, 35, 42, 47};
int n = sizeof(arr)/sizeof(arr[0]); //To get length of an array
int x = 18; // Element to be searched
printf("Enter the no, to be searched");
scanf("%d",&x); // Element to be searched
int index = interpolationSearch(arr, n, x);
// If element was found
if (index != -1)
printf("Element found at index %d", index);
printf("Element found at position %d", index+1);
else
printf("Element not found.");
return 0;