二分查找与拉格朗日差值查询

来源:互联网 发布:java窗口全局变量 编辑:程序博客网 时间:2024/05/17 07:27

一、我们先写一个主方法:

    public static void main(String[] args)     {         int [] myint=new int [1024];         for(int i=1;i<=1024;i++)         {             myint[i-1]=i;         }        System.out.println("数字在"+binsearchX(myint,1019)+"之后");        //1024  2^10    }
二、二分查找如下:

 public static int binsearch(int []arr,int findnum)    {        int max=arr.length-1;        int min=0;        //int mid=(max+min)/2;        //int mid=min+ (max-min)/2;        int mid=min+ (max-min)*(1/2);                int times=1;        while(arr[mid]!=findnum)        {            times++;            if(findnum>arr[mid])            {                min=mid+1;            }            else if(findnum< arr[mid])            {                max=mid-1;            }            mid=(max+min)/2;            if(max<min)            {                return -1;            }                    }      System.out.println( times+"次");        return mid;            }
三、拉格朗日差值查找

      public static int binsearchX(int []arr,int findnum)    {        int max=arr.length-1;        int min=0;        //int mid=(max+min)/2;       // int mid=min+ (max-min)/2;      //  int mid=min+ (max-min)*(1/2);      //        int mid=min+ (max-min)*( mid-min/max- min      );//二分查找法的比例        int mid =    (int) (min+ (max-min)*( (findnum-arr[min])*1.0/(arr[max]- arr[min]  )  )); // int mid=min+ (max-min)*(1/2);        int times=1;        while(arr[mid]!=findnum)        {            times++;            if(findnum>arr[mid])            {                min=mid+1;            }            else if(findnum< arr[mid])            {                max=mid-1;            }            mid=(max+min)/2;            if(max<min)            {                return -1;            }                    }      System.out.println( times+"次");        return mid;            }
小结:拉格朗日差值查找是基于二分查找的基础上,仅仅是在对于中值mid的赋值的处理上产生了差异

二分查找:

  int mid=min+ (max-min)*(1/2);

拉格朗日中值查找:

 int mid =    (int) (min+ (max-min)*( (findnum-arr[min])*1.0/(arr[max]- arr[min]  )  ));
但后者大大提高了查找效率,仅一次就能实现要查找的数据。


0 0