二分查找算法

来源:互联网 发布:增大音量的软件 编辑:程序博客网 时间:2024/06/05 02:32

问题:

    找出一个有序(字典序)字符串数组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;
}

0 0
原创粉丝点击