数据结构——Makefile、算法、排序(2025.2.13)

目录

一、Makefile

1.功能

2.基本语法和相关操作

(1)创建Makefile文件

(2)编译规则

(3)编译

(4)变量

        ①系统变量

        ②自定义变量

二、 算法

1.定义

2.算法的设计

(1)正确性

(2)可读性

(3)健壮性

(4)高效率

(5)低存储

三、练习

1.排序算法

(1)冒泡排序

(2)选择排序

(3)插入排序

(4)快速排序

(5)希尔排序

(6)二分查找


一、Makefile


1.功能

        管理工程代码的编译和链接,可一键化实现代码工程的编译和管理。

        时间戳:根据时间戳,可以只编译发生修改后的文件

2.基本语法和相关操作

(1)创建Makefile文件

         vi Makefile 或 vi makefile

(2)编译规则

        目标文件:依赖的源文件(多个源文件可以通过空格隔开)
                   编译方法

          编译方法:
          -I : 指定头文件存放位置
          -L :   指定库存放的位置
          例:gcc main.c queue.c tree.c -o app -g -lm -I../include  -L../lib

(3)编译

         make : 执行Makefile,进行编译源码
         make  clean  : 删除可执行程序,二进制文件

(4)变量

         ①系统变量

                $@:  代表目标文件
                $^:   代表所有依赖文件
                $<:   代表第一个依赖文件

        ②自定义变量

                变量名=值
                  +=           在原来变量内容的基础上增加
                   :=           在原来的基础上覆盖       

                 变量引用:使用变量中的内容
                 $(变量名)

二、 算法


1.定义

        程序 = 数据结构 + 算法

        算法:解决特定问题的求解步骤

2.算法的设计

(1)正确性

        语法正确
        合法的输入能得到合理的结果
        对非法的输入,给出满足要求的规格说明
        对精心选择,甚至刁难的测试都能正常运行,结果正确

(2)可读性

         便于交流,阅读,理解    高内聚 低耦合

(3)健壮性

         输入非法数据,能进行相应的处理,而不是产生异常

(4)高效率

         时间复杂度需尽可能更低

(5)低存储

         空间复杂度需尽可能更低

  • 算法时间复杂度

        即执行这个算法所花时间的度量
        
        将数据量增长和时间增长用函数表示出来,这个函数就叫做时间复杂度。

        一般用大O表示法:O(n)----->时间复杂度是关于数据n的一个函数
        随着n的增加,时间复杂度增长较慢的算法时间复杂度低

  • 时间复杂度的计算规则

        ①用常数1 取代运行时间中的所有加法常数
        ②在修改后的运行函数中,只保留最高阶项。
        ③如果最高阶存在且系数不是1,则去除这个项相乘的常数。

三、练习


1.排序算法

        ①思想
        ②代码
        ③时间复杂度
        ④排序算法的稳定性:对于两个相同的数据,经过排序,两个相同数据的相对位置没有发生变化,这就是一个稳定的排序算法。

(1)冒泡排序

                相邻两两比较,优先排好最大值

                时间复杂度:O(n^2)
                稳定性:稳定

(2)选择排序

                将待排位置的数据和后续的数据依次进行比较,将小的存放在待排位置,经过一趟,优先排好最小值。
                      for(int i = 0; i < len-1; i++)
                      {
                               for (int j = i+1,; j < len; j++)
                               {
                                           if (a[i] > a[j])
                                                 swap(a[i], a[j]);
                                  }
                     }
                    时间复杂度:O(n^2)
                    稳定性:不稳定

(3)插入排序

                 将待排的元素,依次插入到一个有序序列中,确保插入后任然有序。
                         for (int i = 1; i < len; i++)
                         {
                                 j = i;
                                 int temp = a[i];
                                 while (j > 0 && a[j-1] > temp)
                                {
                                        a[j] = a[j-1];
                                         --j;
                                }  
                                a[j] = temp;
                         }
                        时间复杂度:O(n^2)
                        稳定性:稳定


(4)快速排序

                选定基准值,从两头分别和基准值比较,比基准值大的向后,比基准值小的向前,优先排好基准值。
                      时间复杂度:O(nlogn)             
                      稳定性:不稳定

(5)希尔排序

                将待排的序列,按照增量分成若干个子系列,对子序列进行插入排序。

                       时间复杂度:O(nlogn)~O(n^2) 
                       稳定性:不稳定

(6)二分查找

                   前提:有序的序列
                   时间复杂度:O(logn)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Xcode证书密钥导入

证书干嘛用 渠道定期会给xcode证书&#xff0c;用来给ios打包用&#xff0c;证书里面有记录哪些设备可以打包进去。 怎么换证书 先更新密钥 在钥匙串访问中&#xff0c;选择系统。(选登录也行&#xff0c;反正两个都要导入就是了)。 mac中双击所有 .p12 后缀的密钥&#xff…

span标签 鼠标移入提示框 el-tooltip element-ui

<el-tooltip :content"item.value" placement"top"><span>{{ item.valueHidden }}</span></el-tooltip>

[创业之路-300]:进一步理解货币与金钱, 货币与货币政策

目录 一、货币 1.1 概述 1、货币的定义 2、货币的形态演变 3、货币的职能 4、货币的价值衡量 1.2 货币的分层 1、货币分层的目的与意义 2、货币分层的划分标准与层次 3、各国货币分层的实践 4、货币分层的影响与应用 1.3、M0、M1、M2变化对股市的影响 1、M0变化对…

pnpm的使用

pnpm的使用 1.安装和使用2.统一包管理工具下载依赖 1.安装和使用 pnpm:performant npm &#xff0c;意味“高性能的npm”。 pnpm由npm/yarn衍生而来,解决了npm/yarn内部潜在的bug,极大的优化了性能,扩展了使用场景。被誉为“最先进的包管理工具”。 pnpm安装指令: npm i -g p…

vue+springboot+webtrc+websocket实现双人音视频通话会议

前言 最近一些时间我有研究&#xff0c;如何实现一个视频会议功能&#xff0c;但是找了好多资料都不太理想&#xff0c;最终参考了一个文章 WebRTC实现双端音视频聊天&#xff08;Vue3 SpringBoot&#xff09; 只不过&#xff0c;它的实现效果里面只会播放本地的mp4视频文件&…

nginx播放视频(auth_request鉴权)

学习链接 Nginx通过auth_request结合Springboot实现静态文件下载鉴权 nginx搭建直播推流服务&推流拉流鉴权 步骤 1、安装nginx 这里nginx的版本是nginx-1.24.0 ./configure --with-http_ssl_module --with-stream --with-stream_ssl_module --with-http_auth_req…

【论文笔记】ZeroGS:扩展Spann3R+GS+pose估计

spann3r是利用dust3r做了增量式的点云重建&#xff0c;这里zeroGS在前者的基础上&#xff0c;进行了增量式的GS重建以及进行了pose的联合优化&#xff0c;这是一篇dust3r与GS结合的具有启发意义的工作。 abstract NeRF和3DGS是重建和渲染逼真图像的流行技术。然而&#xff0c;…

Webpack相关优化总结

在使用webpack时提供了各种配置&#xff0c;这里结合在业务中常用的配置汇总一下可以进行的一系列的webpack优化 缩小文件搜索范围 其原理是在构建时&#xff0c;会以用户配置的Entry为开始依次递归遍历每个Module&#xff0c;在遍历每个Module时会调用相应合适的Loader对原模…

【操作系统】操作系统结构

内核 什么是内核&#xff1f; 内核作为应用程序连接硬件设备的桥梁&#xff0c;使得应用程序只需关心与内核交互&#xff0c;不用关心硬件细节。 内核有哪些能力呢&#xff1f; 内核是怎么工作的&#xff1f; Linux 的设计 MultiTask SMP ELF ELF 的意思是可执行文件链接格式…

【无线感知会议系列-22 】Vivisecting Mobility Management in 5G Cellular Networks

这篇是发表在SIGCOMM上的一篇paper 研究方向国内一些移动应用APP厂商&#xff1a;比如抖音,腾讯可以借鉴一下&#xff0c;和终端 厂商联合开发&#xff0c;提高其QOE。 摘要 随着5G技术对多种无线电频段和不同部署模式&#xff08;例如独立组网&#xff08;SA&#xff09;与…

【RAG落地利器】Weaviate、Milvus、Qdrant 和 Chroma 向量数据库对比

什么是向量数据库? 向量数据库是一种将数据存储为高维向量的数据库&#xff0c;高维向量是特征或属性的数学表示。每个向量都有一定数量的维度&#xff0c;根据数据的复杂性和粒度&#xff0c;可以从数十到数千不等。 向量通常是通过对原始数据(如文本、图像、音频、视频等)…

算法18(力扣136)只出现一次的数字

1、问题 给你一个 非空 整数数组 nums&#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题&#xff0c;且该算法只使用常量额外空间。 2、示例 &#xff08;1&…

【鸿蒙开发】第三十章 应用稳定性-检测、分析、优化、运维汇总

目录​​​​​​​ 1 概述 2 使用Asan检测内存错误 2.1 背景 2.2 原理概述 2.3 使用约束 2.4 配置参数 2.4.1 在app.json5中配置环境变量 2.4.2 在Run/Debug Configurations中配置环境变量 2.5 Asan使能 方式一 方式二 运行ASan 2.6 ASan异常检测类型 heap-buf…

20250214在ubuntu20.04下使用obs studio录制外挂的1080p的USB摄像头【下载安装】

20250214在ubuntu20.04下使用obs studio录制外挂的1080p的USB摄像头 2025/2/14 9:10 缘起&#xff1a;笔记本电脑在ubuntu20.04下使用Guvcview录制自带的摄像头&#xff0c;各种问题。 1、降帧率。WIN10/11自带的相机应用可以满速30fps&#xff0c;马上重启到ubuntu20.04&#…

phpipam1.7安装部署

0软件说明 phpipam是一个开源Web IP地址管理应用程序&#xff08;IPAM&#xff09; phpipam官网&#xff1a;https://www.phpipam.net/ 1安装环境 操作系统&#xff1a;Rocky Linux9.5x86_64 phpipam版本&#xff1a;1.7 php版本&#xff1a;8.0.30 数据库版本&#xff1a…

「vue3-element-admin」Vue3 + TypeScript 项目整合 Animate.css 动画效果实战指南

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template &#x1f33a; 仓库主页&#xff1a; GitCode︱ Gitee ︱ Github &#x1f496; 欢迎点赞 &#x1f44d; 收藏 ⭐评论 …

LabVIEW用户界面(UI)和用户体验(UX)设计

作为一名 LabVIEW 开发者&#xff0c;满足功能需求、保障使用便捷与灵活只是基础要求。在如今这个用户体验至上的时代&#xff0c;为 LabVIEW 应用程序设计直观且具有美学感的界面&#xff0c;同样是不容忽视的关键任务。一个优秀的界面设计&#xff0c;不仅能提升用户对程序的…

AWTK-WEB 快速入门(4) - JS Http 应用程序

XMLHttpRequest 改变了 Web 应用程序与服务器交换数据的方式&#xff0c;fetch 是 XMLHttpRequest 继任者&#xff0c;具有更简洁的语法和更好的 Promise 集成。本文介绍一下如何使用 JS 语言开发 AWTK-WEB 应用程序&#xff0c;并用 fetch 访问远程数据。 用 AWTK Designer 新…

餐饮油烟在线监测仪,守护蓝天的隐形卫士

在城市化的快速发展中&#xff0c;餐饮业作为人们日常生活不可或缺的一部分&#xff0c;带来了便捷与美味的同时&#xff0c;也产生了大量餐饮油烟污染问题。据研究表明&#xff0c;长期暴露于高浓度油烟环境中不仅影响人体健康&#xff0c;还对空气质量造成严重破坏。为了有效…

从Sora到有言:3D视频生成技术的突破与应用

近年来&#xff0c;AIGC领域飞速发展&#xff0c;这个词也越来越高频地出现在了大家的生活中。AIGC 能完成的任务也越来越多&#xff0c;大模型的能力飞速增长 —— 从Deepseek生成文字&#xff0c;到StableDiffusion生成图像&#xff0c;再到Sora可以生成视频。 而现在&#x…