折半算法,也就是二分查找法
2017-04-27 20:20 糯米粥 阅读(687) 评论(0) 编辑 收藏 举报一:用递归算法
/// <summary> /// /// </summary> /// <param name="num">数组</param> /// <param name="curr">被查找的数</param> /// <param name="count">需要查找的索引位置</param> /// <param name="isAfter">true 向前,false 向后</param> /// <returns></returns> public static int change(int[] num, int curr, int count, bool isAfter) { int index = count; if (isAfter) index = Convert.ToInt32(Math.Ceiling(count / 2d)); //判断索引是否越界 if (index >= num.Length) { return -1; } if (num[index] < curr) //后半部分查找 { return change(num, curr, index + num.Length, true); } else if (num[index] > curr) //前半部分查找 { return change(num, curr, index - 1, false); } else if (curr == num[index]) { return index; } return -1; }
二:用while循环查找
/// <summary> /// /// </summary> /// <param name="num">需要查找的数组</param> /// <param name="curr">查找的数</param> /// <returns></returns> public static int change2(int[] num, int curr) { int count = num.Length; int index = Convert.ToInt32(Math.Ceiling(count / 2d)); while (true) { //判断索引是否越界 if (index >= num.Length) { return -1; } if (num[index] < curr) { count = index + num.Length; index = Convert.ToInt32(Math.Ceiling(count / 2d)); continue; } else if (num[index] > curr) { count = index - 1; index = count; continue; } else if (curr == num[index]) { return index; } } }
测试:
int[] num = { 1, 2, 8, 9, 95, 98, 100, 190, 900 };
int results = change(num, 100, num.Length, false);
int resultss = change2(num, 100);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?