二分查找:给定数组是有序的,给定一个key值。每次查找最中间的值,如果相等,就返回对应下标,如果key大于最中间的值,则在数组的右半边继续查找,如果小于,则在数组左半边查找,。最终有两种结果,一种是找到并返回下标,第二种是没找到
(1)首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步。

(2)如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤(1)的操作。

(3)如果某一步数组为空,则表示找不到目标元素。

二分查找法_搜索


二分查找法_数组_02

二分查找法_数组_03

static int BinSearch(int value, int[] array)
{

int low = 0;
int high = array.Length - 1;
while (low<=high)
{
int mid = (low + high) / 2;
if (array[mid]==value)
{
return mid;
}
else if (array[mid]>value)
{
high = mid - 1;
}
else
{
low = mid + 1;
}
}

return -1;
}

二分查找法_搜索_04

/// <summary>
/// 递归查找
/// </summary>
/// <returns></returns>
static int BinSearchRecursion(int value, int low, int high, int[] array)
{

if (low>high) return -1;

int mid = (low + high) / 2;

if (array[mid] == value)
{
return mid;
}
else if (array[mid] > value)
{
return BinSearchRecursion(value, low, mid - 1, array);
}
else
{
return BinSearchRecursion(value, mid + 1, high, array);
}


}