Я создаю простую программу, используя интерполяционный поиск на c . Мне интересно, почему он не будет считывать элементы, которые я ввожу в массив

#c #arrays #interpolation

#c #массивы #интерполяция

Вопрос:

 int interpolationSearch(int arr[], int n, int x)
{
int lo = 0, hi = (n - 1);
while (lo <= hi amp;amp; x >= arr[lo] amp;amp; x <= arr[hi])
{
    if (lo == hi)
    {
        if (arr[lo] == x) return lo;
        return -1;
    }

    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 ()
   {
int arr[10], x;
for (int i=0; i<10; i  )
{
    cout << "Enter a value: ";
    cin >> arr[i];
}
cout << "nEnter a value to search: ";
cin >> x;
int n = sizeof(arr) / sizeof(arr[0]);

int index = interpolationSearch(arr, n, x);
if (index != -1)
    cout << "found at index " << index;
else
    cout << "not found.";
return 0;
}
 

Вот мой код. Возможно, моя формула неверна или что-то в этом роде? Я не знаю, но когда я ввожу отсортированные числа в массив и ищу определенное число, оно ничего не возвращает.

Комментарии:

1. Смотрите if (arr[pos < x]) , пока не обнаружите ошибку.

2. Интересно… Алгоритм работает только для отсортированных массивов, и в случае, если внутри массива есть повторяющиеся значения, алгоритм не обязательно выдаст первую позицию.