免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2500 | 回复: 7
打印 上一主题 下一主题

[C] c写的一个折半查找函数,代码有错误吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-11-06 15:30 |只看该作者 |倒序浏览
本帖最后由 joychenke 于 2014-11-06 15:32 编辑

代码如下,想问下,for语句的自加部分,可以用条件表达式的三元运算符“?:”来实现吗?谢谢。
  1. int binsearch(int x,int v[],int n)
  2. {
  3.         int low,high,mid;
  4.         low=0;
  5.         high=n-1;
  6.         for(mid=(high+low)/2;low<=high;(x>v[mid]?(low=mid+1):(high=mid-1)))
  7.         {
  8.                 if(x==v[mid])
  9.                         return mid;
  10.        
  11.         }
  12.                 return -1;               

  13. }
复制代码

论坛徽章:
3
天蝎座
日期:2014-10-25 13:44:312015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:48:31
2 [报告]
发表于 2014-11-06 17:28 |只看该作者
如果是学生,无所谓;

如果工作了,专业坑队友!

论坛徽章:
154
2022北京冬奥会纪念版徽章
日期:2015-08-07 17:10:5720周年集字徽章-年
日期:2022-10-26 16:44:2015-16赛季CBA联赛之深圳
日期:2022-11-02 14:02:4515-16赛季CBA联赛之八一
日期:2022-11-28 12:07:4820周年集字徽章-20	
日期:2023-07-19 08:49:4515-16赛季CBA联赛之八一
日期:2023-11-04 19:23:5115-16赛季CBA联赛之广夏
日期:2023-12-13 18:09:34
3 [报告]
发表于 2014-11-06 17:42 来自手机 |只看该作者
同意楼上,貌似队友只要把代码copy一下测试好不就可以了么

论坛徽章:
24
金牛座
日期:2013-08-21 07:55:52射手座
日期:2014-09-29 15:36:14摩羯座
日期:2014-10-07 21:42:57天秤座
日期:2014-10-16 10:03:00午马
日期:2014-10-19 13:40:31酉鸡
日期:2014-11-08 08:44:54处女座
日期:2014-11-10 17:01:21午马
日期:2014-12-06 16:52:38羊年新春福章
日期:2015-02-12 17:41:512015年迎新春徽章
日期:2015-03-04 09:58:1115-16赛季CBA联赛之广夏
日期:2022-10-07 19:41:11巳蛇
日期:2014-09-13 15:29:54
4 [报告]
发表于 2014-11-06 18:58 |只看该作者
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int binsearch(int x, int v[], int n)
  4. {
  5.     int low, high, mid;
  6.    
  7.     low = 0;
  8.     high = n-1;
  9.     while(low < high) {
  10.         mid = (low + high) / 2;
  11.         if(x <= v[mid])
  12.             high = mid;
  13.         else
  14.             low = mid+1;
  15.     }
  16.     return (x == v[low]) ? low : -1;
  17. }

  18. int main(int argc, char *argv[])
  19. {
  20.     int v[5] = {3, 6, 9, 12, 4};
  21.     int x = 36;
  22.     printf("%d\n", binsearch(x, v, 5));
  23.     return EXIT_SUCCESS;
  24. }
复制代码

论坛徽章:
0
5 [报告]
发表于 2014-11-06 21:17 |只看该作者
mid=(high+low)/2 可能会溢出

论坛徽章:
24
金牛座
日期:2013-08-21 07:55:52射手座
日期:2014-09-29 15:36:14摩羯座
日期:2014-10-07 21:42:57天秤座
日期:2014-10-16 10:03:00午马
日期:2014-10-19 13:40:31酉鸡
日期:2014-11-08 08:44:54处女座
日期:2014-11-10 17:01:21午马
日期:2014-12-06 16:52:38羊年新春福章
日期:2015-02-12 17:41:512015年迎新春徽章
日期:2015-03-04 09:58:1115-16赛季CBA联赛之广夏
日期:2022-10-07 19:41:11巳蛇
日期:2014-09-13 15:29:54
6 [报告]
发表于 2014-11-06 21:43 |只看该作者
回复 5# 1210603696


为啥
   

论坛徽章:
0
7 [报告]
发表于 2014-11-07 11:21 |只看该作者
这算是在坑同事了

论坛徽章:
11
巨蟹座
日期:2013-12-23 11:12:14双子座
日期:2014-08-28 09:14:55子鼠
日期:2014-07-25 16:21:22摩羯座
日期:2014-07-23 15:17:47摩羯座
日期:2014-05-30 13:09:05午马
日期:2014-04-30 18:10:00天秤座
日期:2014-04-25 12:12:00申猴
日期:2014-04-22 11:30:15午马
日期:2014-03-07 16:06:40辰龙
日期:2013-12-25 18:36:00摩羯座
日期:2014-09-02 17:00:55
8 [报告]
发表于 2014-11-07 13:15 |只看该作者
用c/c++库里面的吧~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP