定义
在计算机科学中,二分法查找(binary search)也叫折半查找(half-interval search),又叫对数搜索(logarithmic search)。这是一种在有序数组中查找某一特定元素的搜索算法。
原理
搜索过程从数组的中间元素开始。如果中间元素正好是要查找的元素,则搜索过程终止;如果某一特定的元素大于或者小于小于中间元素,那就在大于或者小于中间元素的那一半查找,而且跟开始一样也从中间元素开始比较。如果某一步骤数组为空,则代表找不到。
特点
这种搜索算法每依次比较都使搜索范围缩小一般
注意
这种搜索算法用于有序数组中的查找
应用
可直接用于在一个数组中进行元素的查找,也可用于插入排序
示例代码
下面是一个二分法查找:
/// <summary>
/// 二分法查找
/// </summary>
/// <param name="arr"></param>
/// <param name="key">要查找的对象</param>
public static int BinarySearch(int[] arr,int value)
{
int low = 0;
int high = arr.Length - 1;
while(low<=high)
{
int middle = (low + high) / 2;
if (value == arr[middle])
{
return middle;//如果找到了就直接返回这个元素的索引
}
else if(value >arr[middle])
{
low = middle + 1;
}
else
{
high = middle - 1;
}
}
return -1;//如果找不到就返回-1;
}
测试一下:
int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int value = BinarySearch(arr, 4);
Console.WriteLine(value);
结果: