1.概念
折半查找也叫二分查找,前提是待查找的数组必须是有序的,假设数组是从小到大排列的,先将待查找的值和有序数组的中间值比较,如果相等则找到,若小于中间值则查找左半部分,若大于中间值则查找右半部分。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
2.实现
/// <summary>
/// 折半查找
/// </summary>
public class BinarySearch
{
/// <summary>
/// 待查找数组
/// </summary>
public int[] arr { get; set; }
/// <summary>
/// 递归法
/// </summary>
public void TraservalSearch(int left,int right,int value)
{
if (arr == null)
{
Console.WriteLine("未找到");
return;
}
if (left < right)
{
int mid = (left + right) / 2;
if (value == arr[mid])
{
Console.WriteLine("找到了" + mid);
return;
}
else if (value < arr[mid])
{
TraservalSearch(left, mid - 1, value);
}
else
{
TraservalSearch(mid + 1, right, value);
}
}
else
{
Console.WriteLine("未找到");
}
}
/// <summary>
/// 非递归
/// </summary>
public void Search(int value)
{
if (arr == null)
{
Console.WriteLine("未找到");
return;
}
int left = 0;
int right = arr.Length - 1;
while (left < right)
{
int mid = (left + right) / 2;
if (arr[mid] == value)
{
Console.WriteLine("找到了" + mid);
return;
}
else if (arr[mid] > value)
{
right = mid - 1;
}
else
{
left = mid + 1;
}
}
Console.WriteLine("未找到");
}
}