408复试day2(7大排序算法)
数据结构
7大排序算法总结:
首先排序分为内排序和外排序:
内排序是指待排序的记录放置在内存,而外排序是指排序的过程中需要对内存进行访问。其中稳定的排序有“插冒归”,即插入排序、冒泡排序、归并排序。
1.冒泡排序
算法原理:
①初始时有序区为空,即全部记录为无序区;
②在无序区中从后往前依次比较相邻记录,如果是逆序,则交换
③每趟排序时,无序区关键字最小的记录被逐渐交换到有序区的第一位,即加入到有序区
④如果一趟排序时没有发生过交换,则提前结束
代码实现:
void BubbleSort(ElemType L[],int n){int i,j;bool exchange;//记录是否发生交换的标志ElemType tem;for(i=0;i<n-1;i++){//最多进行n-1趟冒泡排序exchange=false;for(j=n-1;j>i;j--){//一趟冒泡排序if(L[j]<L[j-1]){//前大后小,即逆序就交换tem=L[j];L[j]=L[j-1];L[j-1]=tem;//交换过之后就改变exchange的值exchange=true;}if(exchange==false){return;}}}
}
冒泡排序的算法评价:
1>待排序序列为正序:比较次数n-1,交换次数为0;
2>待排序序列为逆序:比较次数为 n(n-1)/2,交换次数为 n(n-1)/2
2.快速排序
每趟排序使一个元素放入其最终位置,这一个元素称为枢轴,通常选排序的第一个元素。
枢轴把整个序列划分为两个子序列,利用递归分别对子序列重复上述相同过程,直至子序列长度为0或1为止。
划分方法:
选待排序列的第一个元素作为枢轴x
设置变量:
low指向序列的前端
high指向序列的后端
high和low依次从序列的两端交替向序列中央扫描,将小于x的元素移到枢轴的左边,将大于或等于x的元素移到枢轴的右边
代码实现
void QuickSort(ElemType L[],int s,int e){int low=s,high=e;//本次划分范围ElemType x = L[s];//序列第一个元素作为枢轴whlie(low<high){//内循环①从右到左查找比枢轴小的元素while(low<high&&L[high]>=x){high--;}L[low]=L[high];//将小数放在左侧小数序列中,内循环②从左到右查找比枢轴大或相等的元素while(low<high&&L[low]<x){low++;}L[high]=L[low];//将大数放在右侧大数序列中}//循坏结束时low、high重合L[low]=x;//确定枢轴的最终存放位置if(s<low-1) QuickSort(L,s,low-1);//对左侧小数序列进行递归划分if(high+1<e) QuickSort();//对右侧大数序列进行递归划分
}
算法性能分析:
时间复杂度:最好情况,每次都选到的是中间值作为枢轴O(nlog 2 _2 2n);最坏情况,每次总是选到最小或最大元素作枢轴O(n2)
空间复杂度:需要栈空间实现递归
3.归并排序
归并排序将两个或多个有序序列合并为一个新的有序序列的过程,最简单的归并排序就是将两个有序序列合并为一个有序序列的过程,称为二路归并排序。
注意:只含有一个记录的序列显然是有序序列,将一个长度为n的无序序列看成是由n个长度为1的有序子序列组成。
把有些子序列中相邻的子序列两两归并,得到n/2个长度为2的有序子序列。
再把这些子序列两两归并,如此重复,直至形成一个长度为n的有序序列。
算法性能分析:
时间复杂度:O(nlog 2 _2 2n),每一趟归并的时间复杂度为O(n),总共需要进行log 2 _2 2n趟
4.直接插入排序
序列分为有序区和无序区。每次取无序区的第一个元素按其关键字大小插入到有序区的适当位置。
初始时,指定待排序的第一个元素构成有序区。其余元素构成无序区。
每趟排序时,待插入元素为无序区的第一个元素。
从后向前比较,当前元素如大于待插入元素,则向后移动。
每次插入后,有序区增加一个元素,无序区减少一个元素
无序区为空时,排序结束。
性能分析:
基本操作:比较和移动的次数,决定了排序的时间性能。
待排序列为“正序”时,比较和移动的次数最少;
待排序列为“逆序”时,比较和移动的次数最多。
5.简单选择排序
序列分为有序区和无序区。每次从无序区选出关键字最小的元素与无序区的第一个元素交换,此时有序区多一个元素。
要点:
初始时,有序区为空,全部元素位于无序区
每趟排序时,选择无序区关键字最小的元素与无序区的第一个元素交换
每次选择并交换后,有序区增加一个元素,无序区减少一个元素
当无序区剩下最后一个元素时,排序即可结束。
6.希尔排序
本质上是在插入排序算法的基础上进行的改进,就是先将待排序列分割成若干子序列分别进行插入排序,待整个序列中的记录“基本有序“时,再对全体记录进行一次直接插入排序
首先选择一个增量序列t1,t2……tk.令tk=1
按增量序列个数k,对序列进行k趟排序
每趟排序,根据对应的增量ti,将待排序列分割成若干长度为m的子序列,分别对各子表进行直接插入排序。仅增量因子为1时,整个序列作为一个表来处理,表长度即为整个序列的长度。
7.堆排序
即要满足堆积的性质,即子结点的键值一定大于或小于其父结点(根节点),其中每个结点的值大于等于其左右孩子结点的值,称为大根堆(大顶堆),反之,若每个结点的值都小于等于其左右孩子结点的值,称为小根堆(小顶堆)。
原理:
1.将初始待排关键字序列(R1,R2…………Rn)构建成大顶堆,此堆为初始的无序区;
2.将堆顶元素R[1]与最后一个元素R[n]交换,此时得到新的无序区(R1,R2…………Rn-1)和新的有序区(Rn),且满足R[1,2,……n-1]<=R[n].
3.由于交换后新的堆顶R[1]可能会违反堆的性质,因此需要对当前无序区调整为新堆,然后再次将R[1]与无序区最后一个元素交换,得到新的无序区和新的有序区。不断重复此过程直到有序区的元素个数为n-1,则排序完。
相关文章:
408复试day2(7大排序算法)
数据结构 7大排序算法总结: 首先排序分为内排序和外排序: 内排序是指待排序的记录放置在内存,而外排序是指排序的过程中需要对内存进行访问。其中稳定的排序有“插冒归”,即插入排序、冒泡排序、归并排序。 1.冒泡排序 算法原理&a…...

Vue消息订阅与发布
引入第三方库pubsub.js: npm i pubsub-js Student.vue import pubsub from pubsub-jsmethods:{sendStudentName(){// this.$bus.$emit(hello,this.name)pubsub.publish(hello,666)}}, School.vue import pubsub from pubsub-jsmounted() {// console.log("school&quo…...
MySQL学习笔记 ------ 分组查询
#进阶5:分组查询 /* 语法: select 分组函数,列(要求出现在group by的后面) from 表 【where 筛选条件】 group by 分组的列表 【order by 排序的字段】; 注意:查询列表必须特殊,要求是分组函…...

Matlab 点云平面特征提取
文章目录 一、简介二、实现代码2.1基于k个邻近点2.2基于邻近半径参考资料一、简介 点云中存在这各种各样的几何特征,这里基于每个点的邻域协方差来获取该点的所具有的基础几何特征(如下图所示),这样的做法虽然不能很好的提取出点云中的各个部分,但却是可以作为一种数据预处…...

vite的介绍
Vite(法语意为 "快速的",发音 /vit/,发音同 "veet")是一种新型前端构建工具 优势 💡 极速的服务启动,使用原生 ESM 文件,无需打包 ⚡️ 轻量快速的热重载,始终极快的模块…...

裁员 10%,暴跌 14%,这家 IT 独角兽正在被抛弃!
流量一跌再跌,Stack Overflow 简直被狠狠地上了一课! 3 月份 Stack Overflow 的流量下降了近 14%。该公司的 CEO 压力空前,甚至昨天决定裁员 10%! 平均每月下降6%,上月直接跌了近14% 开发人员越来越多地从 AI 聊天机器…...

电脑记事本在哪里?电脑桌面显示记事本要怎么设置?
绝大多数上班族在使用电脑办公时,都需要随手记录一些琐碎或重要的事情,例如工作注意事项、常用的文案、某项工作的具体要求、多个平台的账号和密码等。于是就有不少小伙伴想要使用电脑记事本软件来记录,那么电脑记事本在哪里呢?想…...

微服务笔记---Nacos集群搭建
微服务笔记---Nacos集群搭建 Nacos集群搭建1.集群结构图2.搭建集群2.1.初始化数据库2.2.下载nacos2.3.配置Nacos2.4.启动2.5.nginx反向代理2.6.优化 Nacos集群搭建 1.集群结构图 官方给出的Nacos集群图: 其中包含3个nacos节点,然后一个负载均衡器代理…...
python 小案例
要使用Django开发一个抽奖活动的后台,需要进行以下步骤: 安装Django:首先确保已经安装了Python和pip,然后使用pip安装Django库: pip install django 创建Django项目:在命令行中执行以下命令创建一个新的Dja…...
【SpringBoot】SpringBoot JPA 基础操作(CURD)
SpringData JPA 基本介绍 Spirng data jpa是spring提供的一套简化JPA开发的框架,按照约定好的【方法命名规则】写dao层接口,就可以在不写接口实现的情况下,实现对数据库的访问和操作。 同时提供了很多除了CRUD之外的功能,如分页…...

大数据技术之Hive3
目录标题 5、DML 数据操作5.1 数据导入5.1.1 向表中装载数据load5.1.2 通过查询语句向表中插入数据insert5.1.3 查询语句中创建表并加载数据5.1.4 创建表时通过 Location 指定加载数据路径 5.2 数据导出5.2.1 insert导出5.2.2 Hadoop 命令导出到本地 5.3 清除表中数据(Truncate…...
Spring Boot实践二
一、模板引擎简介 在之前的示例中,我们通过RestController来处理请求: package com.example.demospringboot.web;import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RequestMapping;Re…...

python:基于GeoPandas和GeoViews库将GEDI激光高程数据映射到交互式地图
作者:CSDN @ _养乐多_ 本文将介绍 GEDI(Global Ecosystem Dynamics Investigation)激光雷达数据某数据点波形数据提取,并绘制图表,添加其他图表元素并使图表具有交互性。 在本文中,我们将探索如何打开、读取和处理GEDI数据,并利用地理信息处理库GeoPandas和地理空间数…...
汇编实现strcpy
需要有两点注意: .type在windows的mingw上无法识别。windows下编译会找不到my_strcpy的定义(undefined reference),通过看mingw的代码发现,它会在汇编函数前加一个下划线,所以在我们的汇编代码中加上下划线…...

Appium+python自动化(二十四) - 元素等待(超详解)
思考 在自动化过程中,元素出现受网络环境,设备性能等多种因素影响。因此元素加载的时间可能不一致,从而会导致元素无法定位超时报错,但是实际上元素是正常加载了的,只是出现时间晚一点而已。那么如何解决这个问题呢&am…...

NFT市场泡沫破裂了吗?投资NFT是否仍然安全?
近期,NFT市场的价格出现了明显的下跌趋势,许多人开始担心NFT市场是否已经进入了泡沫破裂的阶段。但是,我们需要认真分析这个问题,并且探讨投资NFT是否仍然安全。 NFT(Non-Fungible Token)是一种非同质化代币…...

k8s使用helm部署Harbor镜像仓库并启用SSL
1、部署nfs存储工具 参照:https://zhaoll.blog.csdn.net/article/details/128155767 2、部署helm 有多种安装方式,根据自己的k8s版本选择合适的helm版本 参考:https://blog.csdn.net/qq_30614345/article/details/131669319 3、部署Harbo…...

B/B+树算法
B树 基本概述 B树又称多路平衡搜索树。一棵m阶B树,要么是空树,要么满足以下特性: 每个节点最多有m棵子树根节点至少有两棵子树内部节点(除根和叶子节点以外的节点)至少有⌈m/2⌉棵子树关键字个数比子树个数少1终端节…...

vue3.2 + elementPlus + Windi CSS + ts创建一个好用的可兼容不同宽高的login页面
1.效果预览 2. 代码准备 导入windiCSS: npm i -D vite-plugin-windicss windicss windiCSS官网: https://cn.windicss.org/integrations/vite.html 使用vite创建好你的vue工程 sass版本为: 1.49.9 3.Windi CSS在页面中使用 apply 二次定义类名…...

Integer包装类详解加部分源码
【1】Java.lang直接使用,无需导包: 【2】类的继承关系: 【3】实现接口: Serializable,Comparable<Integer> 【4】这个类被final修饰,那么这个类不能有子类,不能被继承: 【5】…...

国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...

初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...