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         }

 

posted @ 2018-11-01 15:27  RainPainter雨画  阅读(326)  评论(0编辑  收藏  举报