数据结构之搜索算法一:二分查找
前面回顾了几个主要的排序算法,排完序就该搜索了,主要的查找类型分为静态查找表和动态查找表两大类,先看看静态查找表常用算法,二分搜索。
二分搜索原理如下:
二分查找又称折半查找,它是一种效率较高的查找方法。
【二分查找要求】:
* 1.必须采用顺序存储结构
* 2.必须按关键字大小有序排列。
*
【优缺点】折半查找法的优点是比较次数少,查找速度快,平均性能好;
* 其缺点是要求待查表为有序表,且插入删除困难。
* 因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
*
【算法思想】首先,将表中间位置记录的关键字与查找关键字比较,
* 如果两者相等,则查找成功;
* 否则利用中间位置记录将表分成前、后两个子表,
* 如果中间位置记录的关键字大于查找关键字,
* 则进一步查找前一子表,否则进一步查找后一子表。
重复以上过程,直到找到满足条件的记录,使查找成功,
* 或直到子表不存在为止,此时查找不成功。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public int Search(int[] seqList, int key)
{
int flag = -1;
int mid;
int low = 0;
int high = seqList.Length - 1;
while (low < high)
{
mid = (high + low) / 2;
if (seqList[mid] == key)
{
flag = mid;
break;
}
if (mid==low||mid==high)
{
break;
}
if (seqList[mid] > key)
{
high = mid;
}
if (seqList[mid] < key)
{
low = mid;
}
}
return flag;
}
{
int flag = -1;
int mid;
int low = 0;
int high = seqList.Length - 1;
while (low < high)
{
mid = (high + low) / 2;
if (seqList[mid] == key)
{
flag = mid;
break;
}
if (mid==low||mid==high)
{
break;
}
if (seqList[mid] > key)
{
high = mid;
}
if (seqList[mid] < key)
{
low = mid;
}
}
return flag;
}