数据结构之-【排序】

news2024/10/6 22:32:09

目录

排序

        ⚡️冒泡排序

        ⚡️选择排序

        ⚡️插入排序

        ⚡️堆排序

        ⚡️归并排序

        ⚡️快速排序


🏳️‍🌈排序

将数字从小到大的顺序排列

🔴冒泡排序

「冒泡排序」重复"从序列右边开始比较相邻两个数字的大小,再根据结果交换两个数字的位置"。数字像泡泡一样,慢慢从右往左"浮"到序列的顶端。
    在序列的最右边放置一个天平,比较天平两边的数字。如果右边的数字较小,则交换位置。完成后,往左移一个位置比较两个数字大小,重复操作直到天平到达序列的最左边为止。一轮操作后,序列中最小的数字就会移动到最左边。第二轮时候移动到左边第二个位置为止,重复此操作,直到最终排序完成。

「总结」假设序列中有n个数,第1轮需要比较n-1次,第2轮需要比较n-2次。因此,总的次数为总的比较次数为(n-1)+(n-2)+…+1≈n2/2。这个比较次数恒定为该数值,和输入数据的排列顺序无关。
    不过,交换数字的次数和输入数据的排列顺序有关。假设出现某种极端情况,如输入数据正好以从小到大的顺序排列,那么便不需要任何交换操作;反过来,输入数据要是以从大到小的顺序排列,那么每次比较数字后便都要进行交换。因此,冒泡排序的时间复杂度为O(n2/2)。

🔴选择排序

「选择排序」重复"从待排序的序列中寻找最小值,将其与待排序序列中最左边的数字进行交换",在序列中寻找最小值时使用的是线性查找。

「将数字1~9排序」线性查找在数据中找到最小值1将其与6位置进行交换,最小值1归位。(如果最小值已经在最左端,就不需要任何操作)。在余下的数据中继续寻找最小值,于是找到了2,将其与6交换位置,最小值2归位。重复操作直到最终排序完成。「总结」选择排序使用了线性查找来寻找最小值,因此在第1轮中需要比较n-1个数字,第2轮需要比较n-2个数字……到第n-1轮的时候就只需比较1个数字了。因此,总的比较次数与冒泡排序的相同,都是(n-1)+(n-2)+…+1≈O(n2/2)次。每轮中交换数字的次数最多为1次。如果输入数据就是按从小到大的顺序排列的,便不需要进行任何交换。选择排序的时间复杂度也和冒泡排序的一样,都为O(n2)。

🔴插入排序

「插入排序」是一种从序列左端开始依次对数据进行排序的算法,排序过程中左侧的数据陆续归位,右侧留下的就是还未被排序的数据。思路是从右侧未排序区域内取出一个数据,将它插入到已排序区域内合适的位置上。
「将数字1~9排序」接下来从待排数字中取出最左边的数字3,将它与左边已归位的数字进行比较。若左边数字更大,就交换这两个数字。因为5>3,所以交换位置,至此第2轮操作结束。第3轮取出待排序区域中最左边的数字4,将它与左边的数字5比较,由于5>4,所以交换位置。交换后再把4和左边的3进行比较,发现3<4至此操作结束。重复此操作直至排序完成。

「时间复杂度」如果取出的数字比左边已归位的数字都要小,就必须不停地比较大小,交换数字,直到它到达序列的最左边为止。在最糟糕的情况下,第2轮需要操作1次,第3轮操作2次……第n轮操作n-1次,所以时间复杂度为O(n2)。

堆排序

「堆排序」首先在堆中存储所有的数据,并按降序来构建堆。为了排序,需要再从堆中把数据一个个取出来。

首先取出根结点数字7后,放到数组重新构造堆。重复此操作即可。

归并排序

「归并排序」会把序列分成长度相同的的两个子序列,当无法继续分时(也就是每个子序列中只有一个数据时),就对子序列进行归并。归并指的是把两个排好序的子序列合并成一个有序序列。该操作会一直重复执行,直到所有子序列都归并为一个整体为止。

把6和4合并,合并后的顺序为[4,6],接下来把3和7合并,合并后的顺序为[3,7]。接下来我们看看如何合并[4,6]和[3,7]。合并这种含有多个数字的子序列时,要先比较首位数字,在移动较小数字。因为4>3,所以移动3。同样地,再比较序列中剩下的首位数字,因为4<7,所以移动4。由于6<7,所以移动6,最后移动剩下的7。递归执行上面操作,直到所有的数字都合为一个整体。

「时间复杂度」无论哪一行都是n个数据,所以每行的运行时间都为O(n)。而将长度为n的序列对半分割直到只有一个数据为止时,可以分成log2n行,因此,总共有log2n行。也就是说,总的运行时间为O(nlogn)。

快速排序

「快速排序」在序列中随机选择一个基准值,然后将除了基准值以外的数分为"比基准值小的数"和"比基准值大的数"这两个类别。如下👇
    [比基准值小的数] 基准值 [比基准值大的数]
    接着,对两个"[]"中的数据进行排序之后,整体的排序便完成了,对"[]"里面的数据进行排序同样也会使用快速排序。

    随机选择基准值,为4。首先,比较3和基准值4,因为3<4,所以将3往左移动。接下来比较5和基准值4,因为5>4,所以将5往右移。以此类推得到下面的排序👇。

    分别对左边和右边的数据进行排序后,就能得到整体的排序。

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

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

相关文章

国产蓝牙耳机哪个牌子好?国产蓝牙耳机质量排行榜

随着3.5 mm耳机插孔被淘汰&#xff0c;特别是5G时代&#xff0c;让手机的内部结构变得越来越小&#xff0c;要将耳机插口塞进一个新的插口&#xff0c;无疑是一件非常困难的事情&#xff0c;而随着蓝牙技术的不断进步&#xff0c;蓝牙耳机也逐渐成为了如今人们配戴手机的首选&a…

Revit中阀门在项目中不可用无法与管道连接?

一、Revit中阀门在项目中不可用的问题 在项目中放置阀门时&#xff0c;有时候不可用&#xff0c;会出现如图1所示问题&#xff0c;无法与管道连接。 出现上图显示问题是因为在编辑族的时候&#xff0c;阀门两边的连接件原心没有完全重合。打开编辑族界面&#xff0c;可以看到如…

怎么辨别哪些才是真的低代码开发平台?

怎么辨别哪些才是真的低代码开发平台&#xff1f;第一次看到这个问题时&#xff0c;我就知道为什么有人会这么问了&#xff0c;目前低代码市场龙蛇混杂&#xff0c;普通人很难分辨出“真”低代码。所以这个问题中“真正”二字最为重要&#xff0c;圈起来&#xff0c;下面我们正…

【产品新体验】CSDN开发云·云IDE使用教程

【产品新体验】CSDN开发云云IDE使用教程1、初识云IDE1.1 拉去git项目1.2 密钥管理2、整体分析云IDE产品介绍 云IDE使用教程 免费使用地址&#xff1a;点击【云IDE】&#xff0c;即可开始创建工作空间啦~ CSDN最新产品【云IDE】来啦&#xff01;【云IDE】将为各位技术er一键秒级…

No6-3.从零搭建spring-cloud-alibaba微服务框架,实现资源端用户认证与授权等(三,no6-3)

代码地址与接口看总目录&#xff1a;【学习笔记】记录冷冷-pig项目的学习过程&#xff0c;大概包括Authorization Server、springcloud、Mybatis Plus~~~_清晨敲代码的博客-CSDN博客 之前只零碎的学习过spring-cloud-alibaba&#xff0c;并没有全面了解过&#xff0c;这次学习p…

【Python】入门,总结与拾遗

前言 根据我的实践经验来看&#xff0c;对于有编程基础&#xff08;如C语言&#xff09;的同学来说&#xff0c;python入门应该很简单&#xff0c;而且加上官方文档做得非常好&#xff0c;所以个人建议python的学习主要去参考官网。本博客主要是记录那些容易忽略的关键点以及对…

蓝桥杯单片机第七届省赛题详细讲解(温度记录器)

看之前强烈建议先自己做一遍&#xff01;&#xff01;&#xff01;演示效果题目讲解代码main.cds1302.cds1302.honewire.conewire.h工程文件演示效果 题目讲解 首先我们从系统框图看起&#xff1a; 做题之前要做的是把系统框图里面的各个模块先提前调试好&#xff01;&#x…

StarRocks 的学习笔记

StarRocks 的学习笔记 文章目录StarRocks 的学习笔记1. 介绍1.1 StarRocks 特性1.2 使用场景1.3 OLAP 多维分析1.4 实时数据仓库1.5 高并发查询1.6 统一分析2. 系统架构2.1 StarRocks架构2.2 StarRocks业务架构2.3 StarRocks 数据生态2.4 *数据管理3. 特性3.1 MPP分布式执行框架…

ES6中的set与map

文章目录1.set1.1创建set集合1.2 如何对set集合进行后续操作1.3 如何与数组进行相互转换1.4 如何遍历1.5set的应用2.map集合2.1 如何创建map2.2 如何进行后续操作2.3 如何与数组转换2.4 遍历一直以来&#xff0c;JS只能使用数组和对象来保存多个数据&#xff0c;缺乏像其他语言…

介绍document部分自带的方法及属性,场景使用例如倒计时等

适用场景页面不显示&#xff08;不看&#xff09;触发方法停止运行逻辑&#xff0c;页面显示&#xff08;看&#xff09;触发方法继续运行逻辑。 &#xff08;例如倒计时&#xff09; 操作手法触发&#xff0c;浏览器多页签切换时触发&#xff0c;或者当前页隐藏浏览器&#xf…

飞象星球落地舟山36所学校 双师课堂化解课后服务区域资源差异

傍晚的阳光正好&#xff0c;此时舟山二小北校区五年级学生周陈延正紧盯大屏幕&#xff0c;沉醉在《航天探秘》飞象星球双师素质课堂带来的知识奥义中。作为浙江极具特色的海岛城市&#xff0c;舟山正进行着有关课后服务领域的新探索&#xff0c;双师素质课堂便是“千岛之城”舟…

VSCODE联合ModelSim语法检错

Vscode联合ModelSim检错 一、Vscode配置 首先在 vs code 中安装支持 Verilog 的插件&#xff1a; 在 vs code 的 Extension 中搜索 Verilog&#xff0c;安装如下图所示的插件&#xff1b; 二、ModelSim语法检查器检查 Modelsim的安装破解本文不再赘述&#xff0c;可选的Mod…

【初阶数据结构】第一篇——时间复杂度和空间复杂度详解(C描述)

文章目录前言什么是数据结构&#xff1f;什么是算法&#xff1f;1. 算法效率1.1如何衡量一个算法的好坏1.2 算法的复杂度1.2 复杂度在校招中的考察2. 时间复杂度2.1 时间复杂度的概念2.2 大O的渐进表示法2.3 常见时间复杂度计算举例例1双重循环例2. 多未知数例3. 常数次循环例4…

【深度学习】卷积神经网络之双阶段目标检测|R-CNN、SPP-Net、Fast-RCNN、Faster-RCNN、R-FCN

文章目录基本概念一、R-CNN1. 网络结构2. 训练流程3. 测试阶段5.RNN存在的问题二、SPP-Net1. 网络结构2. 基础知识共享卷积计算金字塔池化 Spatial Pyramid Pooling3. 训练流程4. 测试流程5. 存在问题三、 Fast R-CNN1. 网络结构2. 基础知识感兴趣区域池化层 (ROI pooling)多任…

别再被数据分析“割韭菜了”,光学python、BI没有用,上项目才行

前几天有个粉丝找我&#xff0c;说花699报了一门数据分析课程&#xff0c;还有实战项目&#xff0c;让我帮她看看她做的数据分析。项目的名称叫&#xff1a;豆瓣高分电影分析。她写了一大堆内容&#xff0c;我也没细看&#xff0c;截取几张可视化图表给大家&#xff0c;大家觉得…

嵌入式串口转CAN模块详细参数分析

引脚定义和尺寸 测试评估板 将模块插到评估板上&#xff0c;注意模块引脚标注要与评估板上插座引脚标注相对应&#xff0c;然后进行参数设置。特别的&#xff0c;也可以在模块集成到电路板上后&#xff0c;直接通过模块的CAN口来配置参数。 通过CAN通道配置参数 模块集成到用…

基于javaweb+mysql的就业管理系统设计和实现(java+springboot+ssm)

基于javawebmysql的就业管理系统设计和实现(javaspringbootssm) 运行环境 Java≥8、MySQL≥5.7 开发工具 eclipse/idea/myeclipse/sts等均可配置运行 适用 课程设计&#xff0c;大作业&#xff0c;毕业设计&#xff0c;项目练习&#xff0c;学习演示等 功能说明 基于jav…

windows10下安装fbprophet及使用虚拟环境

Prophet是Facebook 在2017年2月开源的一款基于 Python 和 R 语言的时间序列预测框架&#xff0c;也是一种数据分析工具。github官网&#xff1a;https://github.com/facebookincubator/prophet prophet是基于可分解&#xff08;趋势季节节假日&#xff09;模型的开源库&#xf…

【云原生 | 从零开始学istio】五、istio灰度发布以及核心资源

istio灰度发布接着上一章部署bookinfo通过 Istio 实现灰度发布什么是灰度发布&#xff1f;使用 istio 进行灰度发布istio 核心资源解读GatewayVirtualServiceDestinationRule写在最后接着上一章部署bookinfo 1.进入 istio 安装目录。 2.istio 默认自动注入 sidecar&#xff0c…

面试题 17.04. 消失的数字

顺序表题目消失的数字1、题目详情2、题目详解&#xff08;1&#xff09;方法1&#xff08;2&#xff09;方法2&#xff08;3&#xff09;方法3&#xff08;4&#xff09;方法4&#xff1a;消失的数字 1、题目详情 题目链接&#xff1a;leetcode消失的数字 数组nums包含从0到…