网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
07月13日漏签0天
算法吧 关注:30,777贴子:59,922
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 2回复贴,共1页
<<返回算法吧
>0< 加载中...

C语言二分查找迷糊了,该从哪里跳出循环?

  • 只看楼主
  • 收藏

  • 回复
  • 6450980
  • 蔡基
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
C语言二分查找迷糊了,该从哪里跳出循环?
和大多数例子不同的是,我这里用的是unsigned而非int
和大多数例子另一个更重要的不同是:
这个二分查找函数在查找失败时还兼有返回一个适当插入位置的任务
具体迷糊的地方见代码注释
//二分搜索,0表示最小元素
//high等于最大可用下标
//本函数二分查找网址字符串
//bsr是二分查找结果
void
my_bsearch (unsigned low, unsigned high, bsrtype * const bsr)
{
//中间位置
unsigned mid;
//最低位置
unsigned const lowest = low;
//最高位置
unsigned const highest = high;
bsr->found_site = UINT_MAX;
bsr->new_site = UINT_MAX;
assert (high < UINT_MAX);
int my_compar_rsult = 0;
if (url_total == 0)
{
bsr->new_site = 0;
return;
}
while (low <= high)
{
mid = low + ((high - low) / 2U);
my_compar_rsult = my_compar (mid);
if (my_compar_rsult == 0)
{
bsr->found_site = mid;
bsr->new_site = mid;
return;
}
//子表为空则直接跳出循环
else if (low == high)
{ //该从这里跳出?
//这里跳出可以确定无错误,但是否多余的进行了一次比较?
break;
}
else if (my_compar_rsult < 0)
{
if (lowest == mid)
break;
high = mid - 1U;
}
else if (my_compar_rsult > 0)
{
if (highest == mid)
break;
low = mid + 1U;
}
//子表为空则直接跳出循环
if (low == high)
{ //该从这里跳出?这里跳出是否会漏掉一次应该进行的比较?
break;
}
}
//"已找到串"设置为空串
found_string = my_realloc (found_string, 0);
//判断新元素插入位置
if (my_compar_rsult < 0)
bsr->new_site = mid;
else
bsr->new_site = mid + 1U;
return;
}


  • 贴吧用户_Q726PbW
  • 入门
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
LZ先谢递归。。。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 2回复贴,共1页
<<返回算法吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示