查询算法——顺序查找(优化),二分查找(递归)
顺序查找
顺序查找又称为线性查找,是一种最简单的查找方法。适用于线性表的顺序存储结构和链式存储结构,从第一个元素开始逐个与需要查找的元素x进行比较,当比较到元素值相同时,返回元素m的下标,如果比较到最后都没有找到,则返回-1;
时间复杂度为O(n)
点击查看代码
public static void main(String[] args) { int[] array = {12, 3, 43, 5, 9}; int target = 43; int[] newArray = new int[array.length + 1]; newArray[0] = target; for (int i = 0; i < array.length; i++) { newArray[i + 1] = array[i]; } } //顺序查找 封装方法 /*private static int sequenceSearch(int[] array, int target) { for (int i = 0; i < array.length; i++) { if (target == array[i]) { return i; } } return -1; }*/ 优化 面对大量数据时,常常要使用预处理或者清洗操作 将要查询的数据放到新数组的第一个,然后将要查询的数组放入新数组进行查询 //查询方法,从最后一位元素往前查询,一直到第一个 public static int sequenceSearchPlus(int[] arr, int key) { int n = arr.length - 1; arr[0] = key; while (arr[n] != key) { n--; } return n; } }
二分查找
/*
* 在有序数组中查找某一特定元素的查找算法
*用给定k值先于中间节点的关键字比较,中间节点把线性表分为两个子表,若相等
* 则查找成功;若不相等,再根据k与该中间节点关键字的比较结果确定下一步查找哪个子表,这样递归进行,直到查找到或查找结束发现表中没有这样的结点
* 折半搜索每次将搜索区域减少一半,时间复杂度为O(logn)
* 空间复杂度O(1)
*
* 当查找表不会频繁更新,删除操作时,使用折半查找是比较理想的
* 如果查找表有频繁的更新,删除操作,维护表的有序会花费比较大的精力,不建议使用该查找方式
* */
点击查看代码
static int binarySearch1(int arr[], int len, int target) { //初始化左右搜索边界 int left = 0, right = len - 1; int mid; while (left <= right) { //中间位置:两边界元素之和/2 向下取整 mid = (left + right) / 2; //arr[mid] 大于target,即要寻找的元素在左半边,所以需要设定右边界为mid-1,搜索左半边 if (target < arr[mid]) { right = mid - 1; //arr[mid]小于target,即要寻找的元素在右半边,所以需要设定左边界为mid+1,搜索右半边 } else if (target > arr[mid]) { left = mid + 1; //搜索到对应元素 } else if (target == arr[mid]) { return mid; } } return -1; }
递归法
点击查看代码
static int binarySearch2(int array[], int left, int right, int target) { if (left <= right) { int mid = (left + right) / 2; if (array[mid] == target) { return mid; } else if (array[mid] < target) { return binarySearch2(array, mid + 1, right, target); } else { return binarySearch2(array, left, mid - 1, target); } } else { return -1; } }
本文作者:奕帆卷卷
本文链接:https://www.cnblogs.com/yifan0820/p/17804191.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异