JAVA-二分查找
首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。(注意:二分查找的前提是数据必须是一个有序的数据)
/** * 递归方式实现二分查找 */ public static int doSearch(int[] arr, int value, int min, int max) { int mid = (min + max) / 2; // 如果索引超出范围了还没找到 // 1.如果找到最左边,即min和max都=0的情况,下一步就是max-1,之后min就大于max,说明未找到 // 2.如果找到最右边,即min和max都=8的情况,下一步就是min+1,之久min就大于max,说明未找到 if (min > max) { return -1; } else { if (arr[mid] < value) { min = mid + 1; return doSearch(arr, value, min, max); } else if (arr[mid] > value) { max = mid - 1; return doSearch(arr, value, min, max); } else { return mid; } } }
/** * 循环方式实现二分查找 */ public static int doSearchByWhile(int[] arr, int value) { int min = 0; int max = arr.length - 1; while (min <= max) { int mid = (min + max) / 2; if (arr[mid] > value) { max = mid - 1; } else if (arr[mid] < value) { min = mid + 1; } else { return mid; } } return -1;// 如果索引都超出了界限,表示未找到。 }
实现结果如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性