二分查找第一个出现值
二分查找第一个出现值,大家帮忙看看是否有误
#include <stdio.h>
int FindFirstElem(int *p, int size, int val)
{
int lo,up,mid;
int tmp;
lo = 0;
up = size-1;
if (p[lo] > val)
return -1;
else if (p[lo] == val)
return lo;
if (p[up] < val)
return -1;
while ( lo!=up)
{
mid = (lo+up)>>1;
if (p[mid]>=val)
{
up = mid;
}
else
{
lo = mid;
if (up == lo+1)
lo = up;
}
}
if (p[lo] == val)
{
return lo;
}
return -1;
;
}
int main()
{
int arr[]={2,2,2,2,2,2,2,3,3,5,7,9,10,10,11,11,11,12,13,14,15,15};
printf("%d\n", FindFirstElem(arr,sizeof(arr)/sizeof(arr[0]),4));
}