首页 > 编程语言 >嵌入式软件--数据结构与算法 DAY 13

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

时间:2024-08-13 18:56:03浏览次数:14  
标签:13 arr -- 复杂度 元素 算法 int 嵌入式软件 查找

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

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;
}

标签:13,arr,--,复杂度,元素,算法,int,嵌入式软件,查找
From: https://blog.csdn.net/zx18831955136/article/details/141143932

相关文章

  • 嵌入式软件--C语言项目 客户信息管理系统
    考虑到目前C语言的学习是以为嵌入式做基础而进行的,项目所使用到的语法和结构都是嵌入式常用到的,这是较为特殊和针对性的项目,不与其他同名项目作比较。若有参考着谨慎借鉴。实现一个客户信息管理系统,功能包括添加客户、修改客户、删除客户、显示客户列表。1.需求说明(1)主菜单......
  • Uptime kuma | 一个美观的监控程序
    UptimeKuma是一个开源的、自托管的监控工具,主要用于监测网站、应用程序或服务的在线状态和健康状况。它具有易于使用、多功能性等功能,截止今日,它在Github的star已有54.3kDocker部署首先,为了连接到终端,我们需要一台服务器,这里我们使用雨云的云服务器部署。当用SSH连接到......
  • 【自用10.2】C++结构体-指向结构体的指针&使用结构体传递值
    指向结构体的指针#include<stdio.h>#include<stdlib.h>#include<string.h>struct_friend{charname[32];charsex;//m-男f-女intage;};intmain(void){struct_friendgirl={"小珑",'f',18};stru......
  • 【自用11.】C++枚举
    概念当一个变量有几个固定的可能取值时,可以将这个变量定义为枚举类型。比如,你可以用一个枚举类型的变量来表示季节,因为季节只有4种可能的取值:春天、夏天、秋天、冬天。 枚举类型的定义enum枚举名{枚举元素1,枚举元素2,……};//例如e......
  • 《SQL 中复杂条件多表关联查询的性能优化秘籍》
    在当今数据驱动的时代,数据库的操作和查询性能对于企业的业务运营至关重要。当面对复杂的业务逻辑和大规模的数据时,实现复杂条件的多表关联查询并确保高效的性能成为了数据库开发者和管理员面临的重要挑战。多表关联查询是在关系型数据库中获取全面和准确数据的常见操作。然......
  • 《优化 SQL 索引策略:提升大规模数据检索效率的关键》
    在当今数字化时代,数据量呈爆炸式增长,企业和组织面临着处理大规模数据的巨大挑战。对于数据库管理员和开发者来说,如何在大规模数据环境中优化SQL中的索引策略,以减少数据检索时间,成为了至关重要的任务。索引是数据库中用于加速数据检索的重要结构。然而,在大规模数据场景下,......
  • 【项目实战】基于Python的网络小说榜单信息爬取与数据可视化系统
    注意:该项目只展示部分功能,如需了解,文末咨询即可。本文目录1.开发环境2系统设计2.1设计背景2.2设计内容3系统页面展示3.1用户页面3.2管理员页面3.3功能展示视频4更多推荐5部分功能代码5.1爬虫代码5.2小说代码1.开发环境开发语言:Python技术框架:Fla......
  • SpringBoot接收参数的几种常用方式
    目录1、路径变量(PathVariables)1.1、接口定义1.2、APIPost测试1.3、详细解释1.4、不写括号里的id的影响1.4.1、情况11.4.2、情况21.4.3、情况3(错误情况)2、请求参数(RequestParameters)2.1、接口定义2.2、APIPost测试2.3、详细解释2.4、`@RequestParam`应用举......
  • iMessage群发 苹果推信真的很好用
    iMessage是苹果设备(iPad、iPhone、iPodtouch)自带的免费信息发送应用。它的信息通过网络发送,不同于运营商短信。目前iMessage日活跃用户1.9亿,日发送约20亿条。和短信分不清不是原因,甚至苹果本来就不希望大家区分imessage和短信因为在很多国家,包括我现在所处的澳大利亚,短信和......
  • javase-day06
    aFile_FileDemo01packagecom.se.aFile;/***绝对路径与相对路径的说明:*1.当前工作空间是/home/user/michael/**需求1:访问/home/user/michael/file1.txt*相对路径:file1.txt*绝对路径:/home/user/michael/file1.txt**需求2:访问/home/user/mi......