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 }