二分查找:给定数组是有序的,给定一个key值。每次查找最中间的值,如果相等,就返回对应下标,如果key大于最中间的值,则在数组的右半边继续查找,如果小于,则在数组左半边查找,。最终有两种结果,一种是找到并返回下标,第二种是没找到
(1)首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步。
(2)如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤(1)的操作。
(3)如果某一步数组为空,则表示找不到目标元素。
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;
}
/// <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);
}
}