Поиск двоичной интерполяции не может найти число, которое я ищу (C) - PullRequest
0 голосов
/ 12 мая 2019

У меня есть задание, требующее, чтобы я использовал алгоритм Binary Interpolation Search, чтобы найти число и его положение в массиве, который я вводю через клавиатуру. К сожалению, пока я не получаю никаких ошибок, программа ничего не возвращает, даже если просит ввести номер! Если у вас есть идея, что может пойти не так, это будет полезно!

Вот мой код:

#include<stdio.h>
#include<math.h>

int bis(int Array[],int x)
{
    int i;
    int hitpos;
    int left = 0;
    int right = sizeof(Array);
    int size = right - left + 1;
    int next;
    int a = x - Array[left];
    int b = Array[right]-Array[left];
    int c = right - left + 1;
    int d = (int)(i*sqrt(size));
    next = (size*a/b+1);
    do
    {
        i=0;
        size = right - left +1;
        if(x >= Array[next])    
        {
            do
            {
                i = i+1;
                right = next + i*sqrt(size);
                left = next + (i-1)*sqrt(size);
            }
            while(x > Array[next + d -1]);
        }
        else if(x < Array[next])
        {
            do
            {
                i = i+1;
                right = next -(i-1)*sqrt(size);
                left = next - i*sqrt(size);
                next = left + (c*a/b);
            }
            while(x < Array[next - d + 1]);
        }
        else if(x = Array[next])
        {
            return next;
        }
        else
        {
            return -1;
        }   
    }
    while (x != Array[next]);


}

int main()
{
    int Array[] = {1,8,10,14,31,55,56,78,87,101};
    printf("Please provide a number for binary interpolation search\n");
    int x;
    scanf("%d", x);
    int hit;
    hit = bis(Array,x);
    if (hit != -1) 
    {
        printf("Element found at index %d", hit); 
    }
    else
        printf("Element not found."); 
    return 0;

}
...