Интерполяционный поиск в массиве


Интерполяционный поиск - самый быстрый поиск в упорядоченном массиве.
В среднем, значение в последовательности из 32 чисел, каждое из
которых лежит в диапазоне от 0 до 100 вычисляется за 1-2 шага. Поиск
делением пополам в той же области будет показывать 3-4 шага.

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

const int N = 32;

int main()
{
	srand(time(NULL));
    int list[N];
    int prev=0;
    // Create ordered list
    for(int i=0;i<N;i++)
    {
        list[i] = rand() % 10 + prev;
        prev = list[i];
        printf("%d, ",list[i]);
    }
    printf("\n");
    int value = rand() % 50;
    printf("Search for %d\n",value);
    
    // Search value
    int L=0;
    int R=N-1;
    int c=-1;
    int count=0;
    int found=0;
    while(L<=R && !found)
    {
        c = L + (double)((value - list[L]) * (R - L + 1)) /
                         (double)(list[R] - list[L]);
        if (c<L || c>R)
            break;
        else if (value<list[c])
            R = c - 1;
        else if (value>list[c])
            L = c + 1;
        else if (value==list[c])
            found=1;
        count++;
    }
    if (!found)
        printf("Not found\n");
    else
        printf("Index = %d\n",c);
	return 0;
}