您的位置:首页 > 其它

二分查找的一点变形

2012-04-08 21:25 274 查看
题目大意:一个有序的数组,数组内的数字有可能重复,找出某数字在数组中首次出现的位置。

简单说下思路:算是普通二分查找的一个变形吧,普通二分查找找到目的数字就直接返回了,这里需要进一步考虑在找到该数字之后,该数字前面是否还有相同的数,我们只要保存当前位置下标,在其前面范围内进一步查找,如果没有查到相同的数字则最终返回该下标即可,如果有相同的数字则自然会对下标进行更新。

还是用代码来说明问题:

int binearySearch(int key, int buf[], int length)
{
int start = 0;
int end = length - 1;
int mid;
int res = -1;		//未找到则返回 -1
while(start <= end)
{
mid = (start + end) / 2;
if(buf[mid] == key)
{
res = mid;		//暂时保留结果
end = mid - 1;	//再进一步进行查找
}
else if(buf[mid] < key)
{
start = mid + 1;
}
else if(buf[mid] > key)
{
end = mid - 1;
}
}

return res;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: