拉格朗日插值查找

/* 拉格朗日插值查找 */

#include<stdio.h>
#include<stdlib.h>
#define N 1024

void search(int a[N],int num)
{
    int tou = 0;
    int wei = N-1;
    int zhong;
    int flag = -1;// 代表找不到
    
    int ci = 0;// 统计次数

    while (tou <= wei)
    {
        printf("\n%d,  %d,  %d",tou,wei,++ci);

        //zhong = (tou+wei)/2;// 取中间值
        
        zhong = tou + (wei-tou)*1.0*(num-a[tou]/a[wei]-a[tou]);// 拉格朗日
        
        if (num == a[zhong])
        {
            printf("找到,a[%d] = %d",zhong,num);
            flag = 1;
            break;
        }
        else if (num > a[zhong])
        {
            tou = zhong + 1;
        }
        else
        {
            wei = zhong - 1;
        }
    }

    if (flag == -1)
    {
        printf("没有找到");
    }


}

void main()
{
    int a[1024];
    for(int i=0;i<N;i++)
    {
        a[i] = i;
        printf("%d  ",a[i]);
    }
    
    int num;
    scanf("%d",&num);

    search(a,num);// 调用函数查找

    system("pause");
}

 

posted on 2015-06-24 09:18  Dragon-wuxl  阅读(167)  评论(0)    收藏  举报

导航