活动地址:CSDN21天学习挑战赛
一,折半查找
1,什么是折半查找
在计算机科学中,折半搜索(英语:half-interval search),也称二分搜索(英语:binary search)、对数搜索(英语:logarithmic search),是一种在有序数组中查找某一特定元素的搜索算法。
搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半
2,折半查找优缺点
折半查找法的优点是比较次数少,查找速度快,平均性能好;
其缺点是要求待查表为有序表,且插入删除困难。
因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
3,算法步骤
① 首先确定整个查找区间的中间位置 mid = (left + right)/2 。
② 用待查关键字值与中间位置的关键字值进行比较;若相等,则查找成功;若大于,则在后(右)半个区域继续进行折半查找;若小于,则在前(左)半个区域继续进行折半查找。
③ 对确定的缩小区域再按折半公式,重复上述步骤。最后,得到结果:要么查找成功, 要么查找失败。折半查找的存储结构采用一维数组存放
4,实操
static void Main(string[] args)
{
int[] a = {1,2,3,4,5,6,7,8,9,10,11 };
int low = 0, high = a.Length - 1;
while (low <= high)
{
int mid = (low + high) / 2;
if (a[mid] > 9)
{
high = mid - 1;
Console.WriteLine(high);
}
else if (a[mid] < 9)
{
low = mid + 1;
Console.WriteLine(low);
}
else
{
Console.WriteLine(a[mid]);
break;
}
}
Console.ReadLine();
}
运行结果如下: