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

    ※二分查找法

           在指定数组中查找某一元素,传统的查找方法为顺序遍历查找,在数组容量很大时,会消耗很多时间资源;此时二分查找法可以相对快速的查找到指定元素.

    ※拉格朗日查找法

           基于二分查找的一种方法,是二分查找法的优化进阶版

            (注意:二分查找法 和 拉格朗日查找法 适用于数据量较大的情况,但是数据必须先排好顺序。)

    二分查找基本思想:

           1.确定查找范围front=0,end=N-1,计算中项mid=(front+end)/2。
          2.若a[mid]=x或front>=end,则结束查找;否则,向下继续。
          3.若a[mid]<x,说明待查找的元素值只可能在比中项元素大的范围内,则把mid+1的值赋给front,并重新计算mid,转去执行步骤2;
              若a[mid]>x,说明待查找的元素值只可能在比中项元素小的范围内,则把mid-1的值赋给end,并重新计算mid,转去执行步骤2。
     
    二分法     C#代码
     1  public static int BinarySearch(int[] arr, int low, int high, int key)
     2         {
     3             int mid = (low + high) / 2;
     4             if (low > high)
     5                 return -1;
     6             else
     7             {
     8                 if (arr[mid] == key)
     9                     return mid;
    10                 else if (arr[mid] > key)
    11                     return BinarySearch(arr, low, mid - 1, key);
    12                 else
    13                     return BinarySearch(arr, mid + 1, high, key);
    14             }
    15         }

    拉格朗日法  C#代码

     1  public static int LaGeLangRi(int[] nums, int key)
     2         {
     3             int left = 0;
     4             int right = nums.Length - 1;
     5             int middle = 0;
     6             while (left <= right)
     7             {
     8                 middle = left + (right - left) * (key - nums[left]) / (nums[right] - nums[left]);
     9                 if (key == nums[middle]) { break; }
    10                 else if (key > nums[middle]) { left = middle + 1; }
    11                 else { right = middle - 1; }
    12             }            
    13             return middle;
    14         }
  • 相关阅读:
    「UVA12293」 Box Game
    「CF803C」 Maximal GCD
    「CF525D」Arthur and Walls
    「CF442C」 Artem and Array
    LeetCode lcci 16.03 交点
    LeetCode 1305 两棵二叉搜索树中的所有元素
    LeetCode 1040 移动石子直到连续 II
    LeetCode 664 奇怪的打印机
    iOS UIPageViewController系统方法崩溃修复
    LeetCode 334 递增的三元子序列
  • 原文地址:https://www.cnblogs.com/RainPaint/p/9889514.html
Copyright © 2011-2022 走看看