经典算法——顺序查找
2023-03-07 09:40:49 时间
?学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰? 活动地址:CSDN21天学习挑战赛⭐️⭐️⭐️
文章目录
顺序查找
顺序查找也叫线性查找
查找过程:从列表中的第一个元素开始,逐个元素进行比较,如果找到相等的元素,则 查找成功 ,如果直至表中最后一个记录数与目标值都不相等,则表示 查找失败 。 顺序查找算法适用于绝大多数场景,既可以在有序序列中查找目标元素,也可以在无序序列中查找目标元素。
算法效率
算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间。
实现思路
给定一个查找表
设:查找的目标值为
67
,步骤如下
- 从表中的第一个元素开始比较,
51 != 67
,指针右移
- 指针指向第二个元素,也就是
4
,4 != 67
,指针右移
- 指针指向第三个元素,也就是
12
,12 != 67
,指针右移
- 指针指向第四个元素,也就是
67
,67 == 67
,查找成功
代码实现
Java代码实现
定义顺序查找方法
private int orderFind(int number) {
//定义一个数组
int[] arr = {51, 4, 12, 67, 45, 23, 68, 32};
//定义数组下标
int i = 0;
//便利整个数组
while (i < arr.length) {
//如果当前元素和number相等,直接返回当前的下标
if (arr[i] == number) {
return i;
}
//每循环一次,下标+1
i++;
}
//如果最后未找到,那么返回一个标识 -1
return -1;
}
调用方法
// 定义要查找的数字
int findNum = 67;
// 顺序查找 67这个数字在数组中的位置
int i = orderFind(findNum);
//如果结果不为-1,那么说明在数组中匹配到了相等的元素
if(i != -1){
System.out.println("在数组中匹配到数字,下标为:" + i );
}else{
System.out.println("在数组中未找到");
}
效率分析
时间复杂度
- 最坏的情况
最坏的情况就是完整的遍历了整个集合,也并未找到目标的key,此时循环被完整的执行,循环执行次数与n相关,所以时间复杂度为O(n)。
- 最好的情况
最好的情况就是第一次就找到了元素,此时的时间复杂度为常数级O(1)。
- 平均情况
综合两种情况,顺序查找的时间复杂度为O(n),属于查找较慢的算法。
空间复杂度
由于算法不会改变原有的元素集合,只需要一个额外的变量控制索引变化,所以空间复杂度为常数级:O(1)
顺序查找的优缺点
1)缺点:查找效率较低,特别是当待查找集合中元素较多时,不推荐使用顺序查找。 2)优点:算法简单而且使用面广。
相关文章
- 在 Go 里用 CGO?这 7 个问题你要关注!
- 9款优秀的去中心化通讯软件 Matrix 的客户端
- 求职数据分析,项目经验该怎么写
- 在OKR中,我看到了数据驱动业务的未来
- 火山引擎云原生大数据在金融行业的实践
- OpenHarmony富设备移植指南(二)—从postmarketOS获取移植资源
- 《数据成熟度指数》报告:64%的企业领袖认为大多数员工“不懂数据”
- OpenHarmony 小型系统兼容性测试指南
- 肯睿中国(Cloudera):2023年企业数字战略三大趋势预测
- 适用于 Linux 的十大命令行游戏
- GNOME 截图工具的新旧截图方式
- System76 即将推出的 COSMIC 桌面正在酝酿大变化
- 2GB 内存 8GB 存储即可流畅运行,Windows 11 极致精简版系统 Tiny11 发布
- 迎接 ecode:一个即将推出的具有全新图形用户界面框架的现代、轻量级代码编辑器
- loongarch架构介绍(三)—地址翻译
- Go 语言怎么解决编译器错误“err is shadowed during return”?
- 敏捷:可能被开发人员遗忘的部分
- Denodo预测2023年数据管理和分析的未来
- 利用数据推动可持续发展
- 在 Vue3 中实现 React 原生 Hooks(useState、useEffect),深入理解 React Hooks 的