最基础的二分法算法C
int search_digit(int *num,int cnt,int target) { int first = 0; int last = cnt - 1; int mid;/* |x x x x o| -> |x x m x o| x m x */ while(first <= last) { mid = (first + last) / 2; if(num[mid] > target) { last = mid - 1; } else if(num[mid] < target) { first = mid + 1; } else { printf("find cnt:[%d] {%d}\n",mid,num[mid]); return 1; } } return 0; } int main(void) { int flag = 0; int target; int num[9] = {0,1,2,3,4,5,7,9,10}; target = 9; while(1) { flag = search_digit(num,9,target); if(flag) { printf("find number\n"); break; } else { printf("find no number\n"); } } return 0; }
运行结果:
root@ubuntu:/home/watson/test# ./a.out find cnt:[7] {9} find number
该算法存在bug: 无法查询
int num[9] = {1,8,2,3,4,5,7,9,10};的8
上述的无法返回通过二分手段查找具体数值(先排序后二分法查找数据)
下期再续二分法乱序查找具体数据
Life is mess, don't let mess mess us.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了