嵌入式软件--数据结构与算法 DAY 13

news2024/11/25 20:41:21

在嵌入式中,对算法的要求不高,但顺序查找和冒泡排序是经典算法,必须掌握。

1.算法定义

算法是一个用于解决特定问题的有限指令序列(计算机可以执行的操作)。通俗的理解就是可以解决特定问题的方法。

2.时间复杂度

时间复杂度不是执行完一段程序的总时间,而是描述为一个算法中基本操作的总次数。

算法中基本操作重复执行的次数是问题规模n的某个函数f(n),其时间量度记作 T(n)=O(f(n)),称作时间复杂度。这里的n称为问题的规模,如要处理的数组元素的个数为n,则基本操作所执行的次数是n的一个函数f(n)。

执行一次程序基本操作为1,双重遍历为平方。

3.空间复杂度

算法的空间复杂度是指算法在运行过程中除了算法本身的指令、常数外,还需要的针对数据操作的辅助存储空间的大小。同样是问题的规模(或大小)n的函数。

空间复杂度(Space complexity) ,记作:S(n)=O(f(n))。

常见的空间复杂度主要有:O(1) 和 O(n)。

空间复杂度与字节相关。

4.查找算法

顺序查找又称线性查找,是一种基本的查找算法,其原理是:

  1. 从头开始遍历:从数据集的起始位置开始,逐个检查每个元素。
  2. 比较目标:对于每个遍历到的元素,将其与目标元素进行比较。
  3. 查找成功:如果当前元素等于目标元素,则查找成功,返回当前元素的索引。
  4. 查找失败:如果遍历完整个数据集仍未找到目标元素,则查找失败,返回一个特殊的标识来表示未找到。

代码实现:

//顺序查找
//定义函数寻找数组元素的索引
#include <stdio.h>
//定义函数
int ordersearch(int array[],int length,int element)//传参为数组类型、长度和元素
{
    for(int i=0;i<length;i++)
    {
        if(array[i]==element)
       {
        return i;
       }
       
    }
      return -1;//如果没有找到元素,就不返回
}
int main()
{
    int arr[]={123,234,455,565,-234,556,23,46};
    //声明数组长度
    int length=sizeof(arr)/sizeof(int);
    //声明索引成为函数的返回值
    int index=ordersearch(arr,length,-234);
    printf("元素的索引是%d",index);
    return 0;
}

5.冒泡排序

‘一组乱序的数列,想要它升序或降序排列。冒泡排序的原理是,从第一个数开始,以第一个数为基准,与它的第二个数相比较,如果小(假如按升序排列),就不动,如果比第二个数大就互换顺序。然后第二个数与第三个数进行比较,依次相比,直到最后一个数,最后一个数就是数列的最大值。然后剔除最后的最大值,继续从前往后比较,直到只剩一个数。最后展现的顺序就是升序排列。

安装原理,实现代码:

#include <stdio.h>
//声明函数,遍历数组
void print(int arr[],int length)
{
 for(int i=0;i<length;i++)
 {
    printf("%d ",arr[i]);
 }
}
int main()
{
    int arr[]={12,88,-9};
    int length=sizeof(arr)/sizeof(int);
    //第一轮
    for(int i=0;i<length;i++)
    {
        if(arr[i]>arr[i+1])
        {
            int tep=arr[i+1];
            arr[i+1]=arr[i];
            arr[i]=tep;
        }
    }
    //第二轮
    for(int i=0;i<length-1;i++)
    {
         if(arr[i]>arr[i+1])
        {
            int tep=arr[i+1];
            arr[i+1]=arr[i];
            arr[i]=tep;
        }
    }
//声明函数
print(arr,length);

    return 0;
}

从上面代码可以看出,如果数组元素非常多的话,我们需要经过很多轮才能输出打印。N个元素N-1轮代码循环。我们可以找出规律简化它。

简化代码演示:

#include <stdio.h>
void print(int arr[],int length)
{
    for(int k=0;k<length;k++)
    {
        printf("%d ",arr[k]);
    }
}
int main()
{
    int arr[]={-12,90,34,78,45,-3};
    int length=sizeof(arr)/sizeof(int);
    for(int i=0;i<length;i++)
    {
        for(int j=0;j<length-i;j++)
        {
            if(arr[j]>arr[j+1])
            {
                int tep=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=tep;
            }
        }
    }
   print(arr,length);
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2035756.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手动和torch.nn实现卷积神经网络、空洞卷积、残差网络

一、数据集 1. 分类问题 数据集——车辆分类数据 ⚫输入图片,输出对应的类别 ⚫共1358张车辆图片 ⚫分别属于汽车、客车和货车三类 ⚫汽车:779张 ⚫客车:218张 ⚫货车:360张 ⚫每个类别随机取20-30%当作测试集 ⚫各图片的大小不一,需要将图片拉伸到相同大小 汽车 …

three.js 安装方法、基础简介、创建基础场景

threejs简介 Three.js是一个基于JavaScript编写的开源3D图形库&#xff0c;‌利用WebGL技术在网页上渲染3D图形。‌ 它提供了许多高级功能&#xff0c;‌如几何体、‌纹理、‌光照、‌阴影等&#xff0c;‌使得开发者能够快速创建复杂且逼真的3D场景。‌ threejs提供了丰富的功…

云原生日志Loki

1. Loki简介 1.1 Loki介绍 Loki是 Grafana Labs 团队最新的开源项目&#xff0c;是一个水平可扩展&#xff0c;高可用性&#xff0c;多租户的日志聚合系统。它的设计非常经济高效且易于操作&#xff0c;因为它不会为日志内容编制索引&#xff0c;而是为每个日志流编制一组标签…

关于Vue项目npm快捷键,点击run启动报错,及npm i也报错的解决办法

1.配置idea的npm 2.点击运行按钮 3.结果 分析原因及问题&#xff1a; npm i npm run dev 由于是刚刚从gitlab新拉的前端代码&#xff0c;可能没有用命令install过类似于没有编译过&#xff0c;所以执行一下上面的命令 结果报错如下&#xff1a; F:\tbyf\qjyy\hip-manager-ui&…

SpringBoot整合MyBatis-Plus完整详细版(提供Gitee源码)

前言&#xff1a;本篇文章完整详细介绍了SpringBoot整合MyBatis-Plus的完整过程&#xff0c;这边我的SpringBoot版本是2.4版本、JDK1.8和Maven3.8.1版本&#xff0c;跟着文章一步步走就可以了&#xff0c;MyBatis-Plus整合非常方便&#xff0c;也是现在企业开发中经常会用的一个…

学习笔记第二十四天

1.exec族函数的区别 int exec l(const char *path, const char *arg, ...); int exec l p(const char *file, const char *arg, ...); int exec l e(const char *path, const char *arg,..., char * const envp[]); int exec v(const char *path, char *const argv[]); …

1011 World Cup Betting

题目 解释 题目讲的就是&#xff0c;给你三行数&#xff0c;每一行包含3个浮点小数&#xff0c;让你找到最大的那个小数&#xff0c;然后如果最后的小数是第一个&#xff0c;输出W&#xff0c;是第二个&#xff0c;输出T&#xff0c;是第三个&#xff0c;输出L&#xff0c;最后…

Day37 | 188.买卖股票的最佳时机IV 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费

语言 Java 188.买卖股票的最佳时机IV 买卖股票的最佳时机IV 题目 给你一个整数数组 prices 和一个整数 k &#xff0c;其中 prices[i] 是某支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。也就是说&#xff0c;你最多…

Broken: Gallery靶机复现

靶机设置 靶机设置为NAT模式 靶机IP发现 nmap 192.168.112.0/24 靶机IP为192.168.112.142 目录扫描 dirsearch 192.168.112.142 访问浏览器 发现文件页面 查看后发现都没什么用 getshell hydra -L rockyou.txt -P rockyou.txt 192.168.112.142 ssh 尝试爆破ssh账号密码…

互联网应用主流框架整合【Redis常用技术】

和其他大部分NoSQL不同&#xff0c;Redis是支持事务的&#xff0c;尽管没有数据库那么强大&#xff0c;但非常有用&#xff0c;在某些高并发但又要保证高度一致性的场景下&#xff0c;代替数据库事务非常有效&#xff1b;在Redis的机制中&#xff0c;允许通过流水线一次性发给R…

DATAX自定义KafkaWriter

因为datax目前不支持写入数据到kafka中&#xff0c;因此本文主要介绍如何基于DataX自定义KafkaWriter&#xff0c;用来同步数据到kafka中。本文偏向实战&#xff0c;datax插件开发理论宝典请参考官方文档&#xff1a; https://github.com/alibaba/DataX/blob/master/dataxPlug…

2024年TI杯E题-三子棋游戏装置方案分享-jdk123团队-第二弹 手搓机械臂

第一弹赛题的选择与前期方案的准备 opencv调用摄像头bug的解决 机械臂的组装 采用三个舵机&#xff0c;组成一个三自由度的机械臂。 并且利用电磁吸盘的方式&#xff0c;完成对棋子的抓取工作&#xff0c;后面的事实证明&#xff0c;在预算不足的情况下&#xff0c;队友手搓…

顺序表的实现——数据结构

线性表 文章目录 线性表线性表的定义和基本操作线性表的定义线性表的基本操作 线性表的顺序表示顺序表的定义顺序表的实现——静态分配顺序表的实现——动态分配顺序表的特点 线性表的定义和基本操作 线性表的定义 线性表&#xff08;Linear List&#xff09;的定义 ​ 线性…

多进程多线程

exec 系列函数 结束代码函数 atexec 函数 结束标志&#xff0c;从下往上 先出2再出1 void cleanup1() {printf("clean1"); }void cleanup2() {printf("clean2"); }atexec(cleanup1) atexec(cleanup2)

28. 找出字符串中第一个匹配项的下标【 力扣(LeetCode) 】

一、题目描述 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。 二、测试用例 示例 1&#xff1a; 输…

Cmake编译工程

Cmake目录结构&#xff1a;项目主目录中会放一个CmakeList.txt的文本文档&#xff0c;后期使用cmake指令时候&#xff0c;依赖的就是该文档 1.包含源文件的子文件夹包含Cmakelist.txt文件时&#xff0c;主目录的Cmakelists.txtx要通过add_subdirector添加子目录 2.包含源文件…

算法3:二分查找(下)

文章目录 寻找峰值寻找旋转数组最小值 寻找峰值 class Solution { public:int findPeakElement(vector<int>& nums) {int left 0, right nums.size() - 1;while(left < right){int mid left (right - left) / 2;if(nums[mid] < nums[mid 1])left mid 1;…

opencv-python图像增强三:图像清晰度增强

文章目录 一、简介&#xff1a;二、图像清晰度增强方案&#xff1a;三、算法实现步骤3.1高反差保留实现3.2. usm锐化3.3 Overlay叠加 四&#xff1a;整体代码实现五&#xff1a;效果 一、简介&#xff1a; 你是否有过这样的烦恼&#xff0c;拍出来的照片总是不够清晰&#xff…

视频汇聚/安防监控综合平台EasyCVR接入海康私有协议EHOME显示失败是什么原因?

安防监控/视频综合管理平台/视频集中存储/磁盘阵列EasyCVR视频汇聚平台&#xff0c;支持多种视频格式和编码方式&#xff08;H.264/H.265&#xff09;&#xff0c;能够轻松对接各类前端监控设备&#xff0c;实现视频流的统一接入与集中管理。安防监控EasyCVR平台支持多种流媒体…

Stable Diffusion【 ControlNet实战】OpenPose 轻松制作武侠动作

前言 hello&#xff0c;大家好** 好了&#xff0c;进入正题。如何通过Stable Diffusion ControlNet来进行姿态控制。来一起来看下老徐的简单示例&#xff1a; 老徐参数设置&#xff1a; **大模型&#xff1a;**墨幽人造人_v1080 所有的AI设计工具&#xff0c;模型和插件&…