二分查找第一个出现值

zhengwei1984222 2006-12-26 11:31:41
二分查找第一个出现值,大家帮忙看看是否有误

#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));

}
...全文
250 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
cjq87 2006-12-26
  • 打赏
  • 举报
回复
运行一下,没有发现错误
zhengwei1984222 2006-12-26
  • 打赏
  • 举报
回复
lo = mid;
if (up == lo+1)
lo = up;
直接lo = mid+1

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧