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换成其他值实现拉格朗日插值查找

    由来:拉格朗日插值公式

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

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

  • 相关阅读:
    OPENWRT 支持git
    LUCI MVC框架
    luci范例
    Hive | Hive可以避免进行MapReduce
    ORACLE日常-oracle中给date型字段insert into值
    ORACLE日常-ORACLE 中的 ROW_NUMBER() OVER() 分析函数的用法
    ORACLE日常-oracle字符串操作:拼接、替换、截取、查找
    HDFS中的shell操作
    java日常-map转成json
    java学习-reflection反射机制
  • 原文地址:https://www.cnblogs.com/lemaden/p/10239329.html
Copyright © 2011-2022 走看看