# Interpolation Search Program in C

Interpolation search is an improved variant of binary search. This search algorithm works on the probing position of the required value. For this algorithm to work properly, the data collection should be in sorted and equally distributed form.

It's runtime complexity is log2(log2 n).

## Implementation in C

```#include<stdio.h>

#define MAX 10

// array of items on which linear search will be conducted.
int list[MAX] = { 10, 14, 19, 26, 27, 31, 33, 35, 42, 44 };

int find(int data) {
int lo = 0;
int hi = MAX - 1;
int mid = -1;
int comparisons = 1;
int index = -1;

while(lo <= hi) {
printf("\nComparison %d  \n" , comparisons ) ;
printf("lo : %d, list[%d] = %d\n", lo, lo, list[lo]);
printf("hi : %d, list[%d] = %d\n", hi, hi, list[hi]);

comparisons++;

// probe the mid point
mid = lo + (((double)(hi - lo) / (list[hi] - list[lo])) * (data - list[lo]));
printf("mid = %d\n",mid);

// data found
if(list[mid] == data) {
index = mid;
break;
} else {
if(list[mid] < data) {
// if data is larger, data is in upper half
lo = mid + 1;
} else {
// if data is smaller, data is in lower half
hi = mid - 1;
}
}
}

return index;
}

int main() {
//find location of 33
int location = find(33);

// if element was found
if(location != -1)
printf("\nElement found at location: %d" ,(location+1));
else

return 0;
}
```

If we compile and run the above program, it will produce the following result −

## Output

```Comparison 1
lo : 0, list = 10
hi : 9, list = 44
mid = 6