第六章:数据结构与算法-part3:数据结构算法提升

news2024/11/26 18:40:41

文章目录

  • 一、排序算法
    • 1.1 插入排序
      • 1、直接插入排序
        • 2、折半插入排序
        • 3、希尔排序
    • 1.2、交换排序法
      • 1、起泡排序
      • 2、快速排序
    • 1.3 选择类排序
      • 1、简单选择排序
  • 二、业务逻辑算法设计
    • 2.1 基本概念和术语
    • 2.2 静态查找表
    • 2.3、有序表的查找

一、排序算法

排序是数据处理过程中经常使用的一种重要的运算,排序的方法有很多种,本节主要讨论内排序的各种算法,并对每个排序算法的时间和空间复杂性以及算法的稳定性等进行讨论。

1、什么是排序?

排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。例如:将下列关键字序列:49,38,65,97,76,13, 27,49,调整为13,27,38,49,49, 65, 76, 97

2、排序算法的稳定性

排序算法的稳定性: 如果在对象序列中有两个对象r[i]和r[j],它们的关键字 k[i] == k[j],且在排序之前,对象r[i]排在r[j]前面。如果在排序之后,对象rr 仍在对象rr;的前面,则称这个排序方法是稳定的,否则称这个排序方法是不稳定的。(值相同的两个不同位置上的数,在排序后,如果前后位置发生变化就不稳定。)
在这里插入图片描述

3、排序算法分类

按排序过程中使用到的存储介质来分,可以将排序分成两大类序和外排序。内排序是指在排序过程中所有数据均放在内存中处理,不需要使用外存的排序方法。而对于数据量很大的文件,在内存不足的情况下,则还需要使用外存,这种排序方法称为外排序。
内部排序:

  • 分类:插入排序,交换排序,选择排序,归并排序,基数排序
    在这里插入图片描述
    在这里插入图片描述

1.1 插入排序

基本思想:每一轮比较值在有序序列R中的位置
在这里插入图片描述
1、实现”一趟插入排序“可分三步进行:
在这里插入图片描述

1、直接插入排序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码实现:
在这里插入图片描述
直接插入排序的时间复杂度:
在这里插入图片描述

2、折半插入排序

对于数据量不大时可以用直接插入排序,对于数据量较大时,选择折半插入排序。
折半插入排序基本思想是: 设在顺序表中有一 个对象序列 71],…, v[n-1]。其中,1],…, v[i-l] 是已经排好序的对象。在插入 i 时,利用折半搜索法寻找 vij的插入位置
在这里插入图片描述

3、希尔排序

基本思想:对待排记录序列先作“宏观”调整,再作“微观”调整。所谓“宏观”调整,指的是,“跳跃式”的插入排序。
具体做法:
在这里插入图片描述
在这里插入图片描述
例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2、交换排序法

交换排序是通过交换进行排序的方法,基本思想是两两比较待排序对象的关键字,如果发生逆序(即排列顺序与排序后的次序正好相反),则交换之,直到所有对象都排好序为止。

1、起泡排序

起泡排序的基本方法是:设待排序对象序列中的对象个数为n。最多作 n-1 趟排序。在第 i 趟中顺次两两比较r[j-1].Key和r[j].Key,j = i,i+1,…,n-i-1。如果发生逆序,则交换r[j-1]r[j]
在这里插入图片描述

起泡排序的过程

  • 起泡排序的结束条件为,最后一趟没有进行“交换记录
  • 一般情况下,每经过一趟“起泡”,“i 减一”.(但并不是每趟都如此)
    在这里插入图片描述在这里插入图片描述

2、快速排序

一趟快速排序 (一次划分)。
目标:找一个记录R[i],以它的关键字作为“枢轴”’,凡其关键字小于枢轴的记录均移动至该记录之前,反之,凡关键字大于枢轴的记录均移动至该记录之后
在这里插入图片描述
例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
具体实现:
在这里插入图片描述
在这里插入图片描述
快速排序的效率:
当数据量较大时,效率较高,数据量较小时反而慢。
在这里插入图片描述

1.3 选择类排序

1、简单选择排序

在这里插入图片描述
在这里插入图片描述
效率分析:
在这里插入图片描述

二、业务逻辑算法设计

2.1 基本概念和术语

1、查找表:
在这里插入图片描述

2、关键字
在这里插入图片描述
3、查找
在这里插入图片描述
在这里插入图片描述
4、平均查找长度(Average Search Length):
在这里插入图片描述

2.2 静态查找表

使用线性表表示静态查找表。可用顺序或链式存储结构实现查找操作。
1、查找表的定义
在这里插入图片描述
2、基本操作
在这里插入图片描述
3、算法实现
在这里插入图片描述
4、算法“好”还是“坏”衡量?

  • 讨论各种查找算法时,常以算法的效率和存储开销来衡量查找算法的优劣。然而,效率和存储开销常常是相互制约的,很难两者兼顾。
  • 效率只是相对的,通常把对关键字的最多比较次数平均比较次数作为两个基本的技术指标,前者叫做最大查找长度(MSLMaximum Search Length),后者叫做平均查找长度(ASL,AverageSearch Length)
    在这里插入图片描述

2.3、有序表的查找

  • 上述顺序查找表中的查找算法简单,但平均查找长度较大,特别不适用于表长较大的查找表。
  • 若以有序表表示静态查找表,则查找过程可以基于“折半”进行

1、折半查找
在这里插入图片描述
写在最后:
课看完了,只能说质量不高,全程PPT,没意思,就当记录笔记吧。。。。

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

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

相关文章

1990-2020年中国投入产出表

1990-2020年中国投入产出表 1、时间:1990-2020年 2、用途: 投入产出表提供了中国各个经济部门的投入和产出的详细信息。这些数据通常以货物和服务的形式表示,可以显示每个部门如何接收和分配资源,以及他们的经济互动情况。 可…

万级数据优化EasyExcel+mybatis流式查询导出封装

文章目录 前言.千万级数据优化一. 直接上流式查询封装工具代码二. 传统分页导出查询三. 流式查询概念游标查询 前言.千万级数据优化 我们不妨先给大家讲一个概念,利用此概念我们正好给大家介绍一个数据库优化的小技巧: 需求如下:将一个地市表…

Docker Compose 安装使用 教程

Docker Compose 1.1 简介 Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的 快速编排 。从功能上看,跟 OpenStack 中的 Heat 十分类似。 其代码目前在 https://github.com/docker/compose 上开源。 Compose 定位是 「定义和运行多个…

list【1】介绍与使用(超详解哦)

list的介绍与使用 引言list介绍接口使用默认成员函数迭代器容量元素访问数据修改 list的算法接口总结 引言 继vector之后,我们继续来介绍STL容器:list 对于容器的使用其实有着类似的模式,参考之前vector的使用可以让我们更快的上手&#xff…

Focal Loss-解决样本标签分布不平衡问题

文章目录 背景交叉熵损失函数平衡交叉熵函数 Focal Loss损失函数Focal Loss vs Balanced Cross EntropyWhy does Focal Loss work? 针对VidHOI数据集Reference 背景 Focal Loss由何凯明提出,最初用于图像领域解决数据不平衡造成的模型性能问题。 交叉熵损失函数 …

嵌入式底层驱动需要知道的基本知识

先说结论,能,肯定能,必须能! 但是,问题重点在于坚持,程序员这一行 ,下班回家一般都要10点了,再刷两个小时枯燥的学习视频,我想大多数人是坚持不下来的。 但是&#xff…

ABB D674A906U01流量计变送器模块

流量测量: 该模块用于准确测量液体或气体的流量,通常以标准单位(如立方米每小时或加仑每分钟)表示。 传感器技术: 它通常使用各种传感器技术(例如涡轮、电磁、超声波等)来检测流体的流动并进行…

冠达管理:股票停牌后会大涨吗?

股票停牌是指证券买卖所为了保护市场秩序、保护出资者利益等原因暂时中止某些股票的买卖。但是,股票停牌前的股价与停牌后的股价会有什么不同呢?股票停牌后是否会大涨呢?在本文中,咱们将从多个视点进行剖析,以帮助人们…

合宙Air724UG LuatOS-Air LVGL API控件--按钮 (Button)

按钮 (Button) 按钮控件,这个就不用多说了,界面的基础控件之一。 示例代码 – 按键回调函数 event_handler function(obj, event) if event lvgl.EVENT_CLICKED then print(“Clicked\n”) elseif event lvgl.EVENT_VALUE_CHANGED then print(“To…

java.lang.IllegalStateException: Unable to find

java.lang.IllegalStateException: Unable to find a SpringBootConfiguration, you need to use ContextConfiguration or SpringBootTest(classes…) with your test 错误场景:在使用mybatisplus做测试时,出现此错误 解决方案:SpringBoot…

【MCU】SD NAND芯片之国产新选择

文章目录 前言传统SD卡和可贴片SD卡传统SD卡可贴片SD卡 实际使用总结 前言 随着目前时代的快速发展,即使是使用MCU的项目上也经常有大数据存储的需求。可以看到经常有小伙伴这样提问: 大家好,请问有没有SD卡芯片,可以直接焊接到P…

python可视化matplotlib——绘制正弦和余弦

这是一个使用matplotlib库绘制正弦和余弦函数曲线的代码示例。代码中导入了需要的库,并设置了x轴和y轴的标签字体为华文楷体。然后,使用numpy生成一组x轴上的值t,并使用正弦函数生成对应的y轴值s,再使用余弦函数生成对应的y轴值z。…

使用Tampermonkey(篡改猴)向页面注入js脚本

一、Tampermonkey 简单介绍 Tampermonkey是一款浏览器插件,适用于Chrome、Microsoft Edge、Safari、Opera Next 和 Firefox。他允许我们自定义javascript给指定网页添加功能,或修改现有功能。也可以用来辅助调试,或去除网页广告等。 官网地…

Vulkan LoaderLayer

目录 一、Loader The Loader 二、Layer 调度链Dispatch Chains JSON 一、Loader Vulkan是一个层架构,由Vulkan ApplicationLoaderLayerICDs(Installable Client Drivers)组成。 Vulkan 是一个显式 API,可以直接控制 GPU 的实际工作方式。因此&#x…

get请求报错400 非法参数

get请求报错400 非法参数 背景&#xff1a;get请求数据&#xff0c;SpringBoot提供接口&#xff0c;返回400&#xff0c;报错非法参数此种情况排除接口本身错误之外&#xff0c;检查参数中有没有特殊字符 " < > [ \ ] ^ { | } 我这边就是因为其中一个参数中有中括…

数字货运保持深层角力,满帮业绩与投资价值双丰收

上半年&#xff0c;经济持续活跃&#xff0c;货运物流行业承担着帮助经济要素流通的职责&#xff0c;也成为最直接的受益者。 数字货运平台满帮8月23日发布的财报显示&#xff0c;2023年第二季度&#xff0c;其平台单量、用户量均取得显著增长&#xff0c;并带动平台业绩创下新…

【网络设备】交换机的概念、工作原理、功能以及以太网帧格式

个人主页&#xff1a;insist--个人主页​​​​​​ 本文专栏&#xff1a;网络基础——带你走进网络世界 本专栏会持续更新网络基础知识&#xff0c;希望大家多多支持&#xff0c;让我们一起探索这个神奇而广阔的网络世界。 目录 一、认识交换机 二、交换机的主要功能 1、数…

Android——基本控件(下)(十九)

1. 菜单&#xff1a;Menu 1.1 知识点 &#xff08;1&#xff09;掌握Android中菜单的使用&#xff1b; &#xff08;2&#xff09;掌握选项菜单&#xff08;OptionsMenu&#xff09;的使用&#xff1b; &#xff08;3&#xff09;掌握上下文菜单&#xff08;ContextMenu&am…

STM32F4_SD卡

目录 前言 1. SDIO协议简介 2. SDIO命令及响应 3. SD卡的操作模式及切换 4. STM32的SDIO接口 5. SDIO结构体 6. SDIO相关寄存器 7. 实验程序 7.1 main.c 7.2 SDIO_Card.c 7.3 SDIO_Card.h 前言 在之前的单片机学习过程中&#xff0c;我们已经了解到了单片机系统都需…

SQL server开启变更数据捕获(CDC)

一、CDC简介 变更数据捕获&#xff08;Change Data Capture &#xff0c;简称 CDC&#xff09;&#xff1a;记录 SQL Server 表的插入、更新和删除操作。开启cdc的源表在插入、更新和删除操作时会插入数据到日志表中。cdc通过捕获进程将变更数据捕获到变更表中&#xff0c;通过…