目录

​一、算法介绍

1.算法思想

2.算法流程

二、算法实现

1.代码实现

2.测试用例及结果

三、效率分析

1.时间复杂度

2.空间复杂度


​一、算法介绍

1.算法思想

顺序查找也称线性查找,其查找思想非常简单,只需对数组进行遍历并将待查找元素key与数组内元素逐个比较即可,若相同则查找成功返回对应数组下标;若遍历完整个数组也没有找到待查找元素,则说明查找失败,返回-1。

2.算法流程

例:给定一个数组arr[]={2,5,4,8,9,7},查找元素8,成功返回元素对应数组下标,失败返回-1。

若采用上述示例查找元素10,则通过循环比较完数组arr中6个元素后,仍未找到待查找元素,则退出循环并返回-1。

二、算法实现

1.代码实现

#include<iostream>
using namespace std;int SeqSearch(int* arr, int size, int key) {//顺序查找for (int i = 0; i < size; i++) {if (arr[i] == key) {return i;}}return -1;
}void Test() {//测试函数int arr[] = { 2,5,4,8,9,7 };int length = sizeof(arr) / sizeof(arr[0]);//获取数组内元素个数int key;cout << "请输入待查找元素:";cin >> key;int result = SeqSearch(arr, length, key);//调用顺序查找函数if (result == -1) {cout << endl << "查找失败!" << endl;cout<<"集合中没有待查找元素!" << endl;}else {cout << "查找成功!" << endl;cout << "元素" << key << "所在位置下标为" << result << "!" << endl;}
}int main() {Test();return 0;
}

2.测试用例及结果

arr[]={2,5,4,8,9,7}

查找元素8:

查找元素7:

查找元素10:

三、性能分析

1.时间复杂度

最坏情况:

待查找元素位于集合末尾位置或查找失败时,程序需遍历完整个集合才能退出,此时的循环次数与集合元素个数n有关,所以时间复杂度为O(n)。

最好情况:

最理想的情况就是待查找元素位于集合的第一个位置,程序只需执行一次循环和比较就成功找到待查找元素并返回退出,所以时间复杂度为O(1)。

平均情况:

综合两种情况,顺序查找的时间复杂度为O(n)。

2.空间复杂度

算法中只需设置一个临时变量用于控制循环次数和数组下标变化,没有借助额外的辅助空间,所以空间复杂度为O(1)。

四、优化方案

1.优化思想

考虑到顺序查找的思想是通过顺序比较集合元素的方法进行查找,所以我们可以通过设置两个索引从集合的两边进行同时比较查找,这样每次循环就可以比较淘汰两个元素,从而一定程度上的提高算法效率。

2.代码实现

#include<iostream>
using namespace std;int Optimized_SeqSearch(int* arr, int size, int key) {//顺序查找优化版本int index1 = size - 1;//右侧索引int index2 = 0;//左侧索引while (index2 <= index1) {//相等位置也需要比较if (arr[index1] == key) {return index1;}if (arr[index2] == key) {return index2;}index1--;index2++;}return -1;
}void Test() {//测试函数int arr[] = { 2,5,4,8,9,7 };int length = sizeof(arr) / sizeof(arr[0]);//获取数组内元素个数int key;cout << "请输入待查找元素:";cin >> key;//int result = SeqSearch(arr, length, key);//调用顺序查找函数int result = Optimized_SeqSearch(arr, length, key);//调用顺序查找函数if (result == -1) {cout << endl << "查找失败!" << endl;cout<<"集合中没有待查找元素!" << endl;}else {cout << "查找成功!" << endl;cout << "元素" << key << "所在位置下标为" << result << "!" << endl;}
}int main() {Test();return 0;
}

3.测试用例及结果

arr[]={2,5,4,8,9,7}

查找元素8:

查找元素7:

查找元素0:

活动地址:CSDN21天学习挑战赛

查找算法——顺序查找相关推荐

  1. 数据结构与算法笔记(十二)—— 查找算法(顺序查找、二分法查找)

    搜索是在一个项目集合中找到一个特定项目的算法过程.搜索通常的答案是真的或假的,因为该项目是否存在.搜索的几种常见方法:顺序查找.二分法查找.二叉树查找.哈希查找 一.顺序查找 最基本的查找技术,过程: ...

  2. 经典查找算法 - 顺序查找法

    查找-是最常见的数据操作之一,数据结构核心运算之一,其重要性不言而喻. 顺序查找是人们最熟悉的查找策略,对于小规模的数据,顺序查找是个不错的选择. 1. 顺序查找: 核心:从数据的第一个元素开始,依次 ...

  3. 查找算法:二分查找、顺序查找

    08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活.此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/de ...

  4. 【数据结构与算法】比较法分析查找算法与查找结构

    基本的查找技术: 线性表的查找技术 顺序查找 分块查找 二分查找(折半查找) 插值查找 树表的查找技术 二叉排序树 平衡二叉树 B树(B+树.B-树等) 散列表的查找技术 开散列表 闭散列表 顺序查找 ...

  5. C语言丨线性查找(顺序查找)

    程序员在程序设计时常常需要对存储在数组中的大量数据进行处理,如排序.查找等.使用数据库时,用户可能需要频繁通过输入键字值来查找相应的记录.在数组中搜索一个特定元素的处理过程,称为查找.这次我们来介绍一 ...

  6. 查找(顺序查找、二分查找、插值查找)

    查找定义:根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录). 查找表分类:静态查找表和动态查找表. 动态查找表:在查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删 ...

  7. 数据结构与算法-查找算法(二分查找,插值查找,斐波那契(黄金分割法)查找)

    查找算法 以下三种算法的基本思想相同,都是利用递归来寻找 二分查找 思路分析 1.首先确定该数组的中间下标,min = (left + right) / 2 2.然后让需要查找的的数findVal和a ...

  8. 算法 --- 顺序查找、二分查找的js实现

    顺序查找: function seqSearch(arr, data) {for(let i = 0; i< arr.length;i++) {if(data == arr[i]) {retur ...

  9. php顺序查找法,php二分查找、顺序查找算法

    摘要:php查找数组元素有内置的函数array_search和in_array,顺序查找对数组排序没有要求,二分查找法要求数组必须是一个有序数组!1.顺序查找function sequence_sea ...

最新文章

  1. mysql union order by_MySQL order by 在 union 中使用实例分析
  2. Mongo Windows 基本使用入门
  3. jvm 内存溢出问题排查方法
  4. 2003正在锁定计算机,WIN2003 自动锁定怎么解决?
  5. BZOJ 2648 SJY摆棋子(KD-Tree)
  6. eclipse没有java web,Eclipse Juno在Dynamic Web Project中没有JSP(但其他一切都很好)
  7. 接口对前后端和测试的意义
  8. SLAM 无人车融合 IMU 前与 融合 IMU 后的实测效果演示
  9. centos7网卡配置文件详解与固定服务器ip
  10. 如果浏览器大战的格局改变会怎样?
  11. 利用Freessl部署免费SSL证书
  12. 利用Python自动生成小学生加减乘除口算考试题卷
  13. (转)如何使用Xcode的Targets来管理开发和生产版本的构建
  14. 2015年的最后一天后
  15. 恶意软件Emotet卷土重来滥用.LNK文件进行攻击,你只需要一项技术就能有效保护组织
  16. 有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中,谭浩强《c语言程序设计》第六章第四题
  17. ES32中OTA空中升级
  18. 学界:为代码自动添加注释,让 Java 程序的阅读和开发更高效
  19. 存款显示服务器故障,存款显示服务器故障
  20. 集体智慧编程——使用决策树发现潜在客户

热门文章

  1. C# 解析WMTS服务元数据
  2. js的自定义构造函数和工厂模式的区别
  3. [脑洞]复杂页面构建方法
  4. 笑到我了!杨超越杯编程大赛中那些脑洞大开的项目!
  5. HBuilderX编辑器F11退出全屏无效的解决办法 - 切换免打扰模式
  6. 【计算机网络-自顶向下】4—Network Layer: Data Plane网络层:数据平面(概述、路由器工作原理、IPv4、DHCP、IPv6)
  7. corejs和presets env和presets es2015和presets stage-3之间的关系
  8. 你为什么应该为软件付费
  9. exynos4412裸机串口实验
  10. HTML春联(部分Vue)有源码_有素材_包满意