zoukankan      html  css  js  c++  java
  • 二分查找法与拉格朗日插值查找法

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    #define N 1024
     
    void search1(int a[N], int num)//二分法插值查找
    {
    	int tou = 0;
    	int wei = N - 1;
    	int zhong;
    	int flag = -1;//假定一开始找不到
    	int ci = 0;
    	while (tou <= wei)
    	{
    		zhong = (tou + wei) / 2;
    		//zhong=tou+(wei-tou)*(1/2)
    		printf("
    %d %d %d %d", tou, wei, zhong, ++ci);
    		if (num == a[zhong])
    		{
    			printf("Find! a[%d]=%d", zhong, num);
    			flag = 1;
    			break;
    		}
    		else if (num > a[zhong])
    		{
    			tou = zhong + 1;
     
    		}
    		else
    		{
    			wei = zhong - 1;
    		}
    	}
    	if (flag == -1)
    	{
     
    		printf("Not Find!");
    	}
     
    }
     
    void search2(int a[N], int num)//拉格朗日查找
    {
    	int tou = 0;
    	int wei = N - 1;
    	int zhong;
    	int flag = -1;//假定一开始找不到
    	int ci = 0;
    	while (tou <= wei)
    	{
    		//zhong = (tou + wei) / 2;
    		zhong = tou + (wei - tou)*1.0*(num-a[tou])/(a[wei]-a[tou]);//*1.0 乘以一个实数 避免产生误差
    		printf("
    %d %d %d %d", tou, wei, zhong, ++ci);
    		if (num == a[zhong])
    		{
    			printf("Find! a[%d]=%d", zhong, num);
    			flag = 1;
    			break;
    		}
    		else if (num > a[zhong])
    		{
    			tou = zhong + 1;
     
    		}
    		else
    		{
    			wei = zhong - 1;
    		}
    	}
    	if (flag == -1)
    	{
     
    		printf("Not Find!");
    	}
     
    }
     
     
    void main()
    {
    	int a[N];
    	for (int i = 0; i < 1024; i++)
    	{
    		a[i] = i;
    		//printf("%d  ", a[i]);
    	}
    	int num;
    	scanf("%d", &num);
    	search2(a, num);//调用函数查找
    	system("pause");
    }
    

      

    将插值比例1/2换成其他值实现拉格朗日插值查找

    由来:拉格朗日插值公式

    数据均匀排布的情况下 一次找到

    数据不均匀排布的情况下 找到的次数在一次和二分查找法之间

  • 相关阅读:
    巧用系统命令看是否中毒
    从80年代初到2003年末中国出现的街头骗术
    万象数据库新密码世界```和原来的不同了
    换网关bat
    给自己的电脑做一个O盘 -隐藏自己私密的东
    一个小恶 搞 病 毒
    诊断卡常见代码
    路由跟踪命令的用法和技巧
    block,inline和inline-block的区别
    Jquery easyui开启行编辑模式增删改操作
  • 原文地址:https://www.cnblogs.com/lemaden/p/10239329.html
Copyright © 2011-2022 走看看