标签:二分查找
问题:
找出一个有序(字典序)字符串数组arr中值等于字符串v的元素的序号,如果有多个元素满足这个条件,则返回其中序号最大的。
int bisearch(char** arr, int b, int e, char* v)
{
//循环结束有两种情况:
//若minIndex为偶数则minIndex==maxIndex;
//否则就是minIndex==maxIndex-1;
while (minIndex<maxIndex-1)
{
midIndex = minIndex + (maxIndex - minIndex) / 2;//不使用(minIndex+maxIndex)/2是为了避免溢出
if (strcmp(arr[midIndex], v) <= 0)
minIndex = midIndex;
else
maxIndex = midIndex;//不需要midIndex-1,防止minIndex==maxIndex;
}
if (!strcmp(arr[maxIndex], v))//先判断序号 最大的值
return maxIndex;
else if (!strcmp(arr[minIndex], v))
return minIndex;
else
return -1;
}
标签:二分查找
原文地址:http://blog.csdn.net/wangfengfan1/article/details/45567649