Interpolation Search | A Helpful Line-by-Line Code Tutorial

#include <iostream>
#include <cmath>
using namespace std;

int z = 0;

int interpolation(int arr[], int left, int right, int key){

    int low = left;
    int high = right - 1;
    int mid;

    while (arr[high] != arr[low] && key >= arr[low] && key <= arr[high]) {

        mid = low + ( (key - arr[low]) * (high - low) / (arr[high] - arr[low]) );

        if (key > arr[mid]){

            low = mid + 1;

        } else if (key < arr[mid]){

            high = mid - 1;

        } else{

            return mid;

        }

    }

    if (key == arr[low]){

        return low ;

    } else {

        return -1;

    }

}

int main()
{

    int L[] = {0, 1, 2, 3, 4, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610};
    //int L[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    int left = 0;
    int right = sizeof(L) / sizeof(L[0]);

    int key = 144;

    int x;
    if((x = interpolation(L, left, right, key)) == -1 ){

        cout << "Key doesn't exist"<< endl;

    } else {

        cout << "The position of Key is " << x << endl;

    }

return 0; }