#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. Интересно… Алгоритм работает только для отсортированных массивов, и в случае, если внутри массива есть повторяющиеся значения, алгоритм не обязательно выдаст первую позицию.