当前位置: 首页 > news >正文

数据结构——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.lryc.cn/news/538904.html

相关文章:

  • 算法之 跳跃游戏
  • C#中的图形渲染模式
  • 二.数据治理流程架构
  • 瑞萨RA-T系列芯片ADCGPT功能模块的配合使用
  • 扩散模型中的马尔可夫链设计演进:从DDPM到Stable Diffusion全解析
  • 通俗诠释 DeepSeek-V3 模型的 “671B” ,“37B”与 “128K”,用生活比喻帮你理解模型的秘密!
  • 大模型常识:什么是大模型/大语言模型/LLM
  • iOS 中使用 FFmpeg 进行音视频处理
  • SAP-ABAP:SAP的Screen Layout Designer屏幕布局设计器详解及示例
  • 一.数据治理理论架构
  • 亲测有效!使用Ollama本地部署DeepSeekR1模型,指定目录安装并实现可视化聊天与接口调用
  • MySQL安装MySQL服务时提示Install-Remove of the Service Denied
  • (Windows | Linux)ssh访问服务器报错:no matching key exchange method found
  • Linux(centos)系统安装部署MySQL8.0数据库(GLIBC版本)
  • 有哪些滤波,原理是什么,分别在什么时候用
  • 深入解析与解决 Oracle 报错:ORA-29275 部分多字节字符20250213
  • iOS 上自定义编译 FFmpeg
  • linux-带宽性能压测-全解iperfwgetspeedtest-cli
  • 【前端学习笔记】Webpack
  • Qt——连接MySQL数据库之编译数据库驱动的方法详细总结(各版本大同小异,看这一篇就够了)
  • 【R语言】方差分析
  • 深度学习机器学习:常用激活函数(activation function)详解
  • TCP协议(Transmission Control Protocol)
  • django上传文件
  • Web 后端 请求与响应
  • 【深度解析】图解Deepseek-V3模型架构-混合专家模型(MoE)
  • 全平台搭载旭日5!科沃斯GOAT智能割草机器人全新系列正式开售
  • ORB-SLAM3的源码学习:TwoViewReconstruction通过两幅图像来实现重建
  • 基于单片机ht7038 demo
  • 【DeepSeek三部曲】DeepSeek-R1论文详细解读