数据结构-排序算法总结

news2025/7/18 5:47:46

排序算法总结

    • 插入排序
      • 直接插入排序(稳定)
      • 希尔排序
    • 交换排序
      • 冒泡排序(稳定)
      • 快速排序
    • 选择排序
      • 简单选择排序
      • 堆排序
    • 归并排序(稳定)
    • 基数排序(稳定)
    • 多路归并排序(外排序)
    • 总结
      • 知识点总结
      • 题目总结

复习自用

插入排序

直接插入排序(稳定)

将待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,就得到一个新的序列。(抓扑克牌思想)

特点:元素越接近有序,直接插入排序算法的时间效率越高,算法的本质是减治算法;因此当数组接近有序或大概率有序的情况下,或是数组的数量比较小的时候采用插入排序。

时间复杂度:
最好情况:(有序且为正序)O(n)
最坏情况:(逆序)O(n^2)
平均情况:O(n2)

空间复杂度:O(1)

具有稳定性

希尔排序

先将数据进行分组,通过插入排序的方式让数据基本有序,然乎再进行插入排序,能够让插入排序最坏情况的概率降低;
分组的方法:固定步长取值分为一组的方法。分组越多(步长越小)大的数往后走的越快,分组越少排完后越接近有序

希尔排序是对直接插入排序的优化

时间复杂度:
最好情况(正序):O(n)
平均情况:O(n1.3–n2)
最坏情况(逆序):O(n2)

空间复杂度:O(1)

不具有稳定性的排序

交换排序

冒泡排序(稳定)

根据序列中两个记录的值的比较结构来交换两个记录在序列中的位置,将值较小的向前移动

特点:算法的本质是减治排序
时间复杂度:

最好情况(正序):O(n)
最坏情况(逆序):O(n2)
平均情况:O(n2)
空间复杂度:O(1)
稳定性:稳定

快速排序

一共包含三大步:
1.确定待排序元素序列中的某元素作为基准值(选区间最右边的元素/选中间元素 与最右边的元素交换)
2.以基准值为界,大于基准值的放在基准值的右边,小于基准值的放在基准值左边(hover 挖坑 前后下标)
3.然后对左右序列重复该过程,直到小区间中只有一个元素或没有元素为止(size==0||size ==1)
在这里插入图片描述

特点:采用分治算法

时间复杂度:
最好情况:O(nlong(n)) (区间分割,组成形式可以考虑为二叉树形式,最好情况就成了单支树,分治算法变成了减治算法)
平均情况:O(n
long(n))
最差情况:O(n2)

空间复杂度:O(log(n))—O(n)

稳定性:不稳定

选择排序

简单选择排序

每一次从待排序的元素中选出最小的一个元素,若它不是这组元无序素中的最后一个元素,则将它与存放这组有序元素的起始位置交换,直到全部待排序元素全部排完。

或是从无序元素中选出一个最大的,若其不是无序区间的最后一个元素,则将其与存放有序区间的最后一个元素交换,直到无序元素全部排完

特点:效率不高,算法的本质是减治算法
时间复杂度:

最好情况:O(n2)
平均情况:O(n2)
最坏情况:O(n2)
空间复杂度:O(1)
稳定性:不稳定

堆排序

利用堆的特点设计的一种排序算法,排升序要建大堆,排降序要建小堆,建堆是从第一个非叶子节点开始建,利用向下调整的思想逐步建立出整个堆
每次将未排序序列的第一个与最后一个元素进行交换,然后利用向下调整,将最大的元素调整到最后一个。

特点:算法的本质是减治算法

时间复杂度:
最好情况:O(nlongn)
平均情况:O(n
longn)
最坏情况:O(n*longn)

空间复杂度:O(1)

稳定性:不稳定

归并排序(稳定)

算法思想:把数组平均分成两部分,分别对左右两部分做均分,直到区间的size<=1,然后利用一个额外的数组空间,逐步将两个数组按序排列,再将排好的数据拷贝回原始数组,这样使子序列的段间有序,将子序列归并为完整的序列

特点:分治算法,是外部排序最好的算法

时间复杂度:
最好情况:O(n*log(n))

空间复杂度:O(n)

稳定性:稳定

基数排序(稳定)

算法思想:若分配的是数字,数字范围是0~9,所以需假设有10个桶来放关键字,每个桶分别代表0,1,2,3 、、、9,然后所有数字要位数相同,不够用0来补(如12,补为012),以三位数为例(原始序列中,位数最长的关键字是三位数),需要进行三次分配,第一次按个位分配,个位是几就放入几号桶,全部放完之后,从0号桶开始按顺序取出桶内的数,注意如果一个桶内放了多个关键字,则要按先进先出的原则取出桶内的关键字。第二次按十位分配,原理同上,第三次按百位分配,最后按原则取出关键字后即可得到一个有序序列。

(1)通过键值得各个位的值,将要排序的元素分配至一些桶中,达到排序的作用
(2)基数排序法是属于稳定性的排序,基数排序法是效率高的稳定排序法
(3)基数排序是桶排序的扩展

点:算法的本质是减治算法

时间复杂度:(r个队列,d趟分配)
最好情况:O(d(n+r))
平均情况:O(d(n+r))
最坏情况:O(d(n+r))

空间复杂度:O®

稳定性:稳定

多路归并排序(外排序)

二路归并排序是每次将数组分割为两个子数组,多路归并排序是将数组分割为多个子数组进行归并,其他方面和二路归并相同。可以将二路归并看作二叉树,多路为多叉树。
在这里插入图片描述

总结

知识点总结

在这里插入图片描述

算法的稳定性
排序前后,相同关键字的次序(相对位置)若一致则稳定,不一致则不稳定。

稳定:冒泡排序、直接插入排序、归并排序、基数排序
不稳定:快速排序、希尔排序、堆排序、简单选择排序

比较次数 与 序列初态
无关:二路归并排序、简单选择排序、基数排序
有关:快速排序、直接插入排序、冒泡排序、堆排序、希尔排序

排序趟数 与 序列初态
无关:直接插入排序、折半插入排序、希尔排序、简单选择排序、归并排序、基数排序
有关 :冒泡排序、快速排序

比较次数 与 初始状态
无关:简单选择排序
有关 :插入排序、冒泡排序、快速排序

时间复杂度为O(nlog2n): 快排、归并、堆排

最好情况达到线性:冒泡(正向判断)、插入(逆向判断)

题目总结

1.判断稳定性
在这里插入图片描述

2.排序趟数与初始状态无关
在这里插入图片描述
3.移动次数与初始状态无关
在这里插入图片描述
4.比较次数与初始状态无关
在这里插入图片描述

5.每一趟排序结束都至少能够确定一个元素最终位置的方法
在这里插入图片描述
6.待排元素基本有序,效率最高的排序算法在这里插入图片描述

7.就平均性能而言,目前最好.的内排序算法
在这里插入图片描述
快速排序 > 归并排序 > 希尔排序 > 堆排序

动态排序过程
六大排序算法

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

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

相关文章

Stream之flatMap用法

记录一下flatMap的用法 个人理解是将流中的流合并 Data AllArgsConstructor NoArgsConstructor public class WhiteIp {//idprivate Integer id;//域名private String domain;//ip,多个用;分隔private String ipaddress;public static void main(String[] args) {WhiteIp w1 …

Android未捕获异常监控原理

背景 本文仅探讨java层的未捕获异常的监控为什么我们自己的异常捕获总是比 Bugly 收到的信息少&#xff1f; Android未捕获异常的监控与收集 Java层未捕获异常监控的基本实现 先看看Java层未捕获异常监控的运行过程&#xff1a; public class MyUncaughtExceptionHandler …

企业虚拟网络管理

随着企业规模的扩大&#xff0c;其网络的规模和复杂性也会成比例地扩展。企业级组织和中小型企业需要大规模网络来满足不断增长的业务需求。然而&#xff0c;大规模网络需要大量的物理组件、定期维护和配置&#xff0c;所有这些都是有代价的。因此&#xff0c;为了规避这些额外…

Spring Boot面试题

什么是 Spring Boot&#xff1f; Spring Boot 是 Spring 开源组织下的子项目&#xff0c;其设计目的是专注于Spring应用的开发&#xff0c;开发人员可以把更多的精力放在业务代码上&#xff0c;而无需过多关注XML的配置&#xff0c;从而简化Spring应用开发&#xff0c;提高开发…

牛客小白月赛61-E

传送门 题意 给你一个长度为n的序列&#xff0c;它有n&#xff01;个排列方法 问在这n&#xff01;个排列方法中 逆序对的总数是多少 首先要知道 逆序对数n&#xff01;/2*&#xff08;不相等的数字对儿数&#xff09; 不相等的数组对儿数cn2c_{n}^{2}cn2​-Zcnum[a[i]2c_{n…

前端如何写进度条(上传或者下载文件的时候)

1.需求 在日常开发中&#xff0c;我们经常会遇到上传或者下载文件的需求&#xff0c;以下载为例&#xff1a; 如果后台文件是现成的&#xff0c;浏览器就会在底部出现下载的过程&#xff0c;如果点击下载后&#xff0c;有些业务是需要去打包&#xff0c;然后再下载文件的话&a…

【C++语法难点】 深拷贝和浅拷贝是什么,拷贝构造,拷贝赋值

文章目录1.开始&#xff1a;构造函数1.2 在栈区和堆区创建对象1.3 缺省构造函数1.4 类型转换构造函数1.5 拷贝构造函数1.6 缺省拷贝构造函数&#xff08;浅拷贝&#xff09;1.7 深拷贝构造函数 (深拷贝)1.8 拷贝赋值1.开始&#xff1a;构造函数 语法形式 class 类名{类名(形参…

UE5笔记【三】UE5材质Materials

材质&#xff1a;可以将材质看作是StaticMesh上面的绘画。这副绘画Paint是由图层组成的&#xff0c;这些图层形成了所谓的物理基础渲染&#xff08;Physically Based Rendering OR PBR&#xff09;。这些PBR的特殊之处在于&#xff1a;几乎可以让我们模拟显示世界中的任何材质。…

「Redis数据结构」QuickList

「Redis数据结构」QuickList 文章目录「Redis数据结构」QuickList一、前言二、概述三、结构四、小结一、前言 在前面一章&#xff0c;我们已经学习了ZipList压缩列表&#xff0c;ZipList虽然节省内存&#xff0c;但也引发了不少问题。 问题1&#xff1a;ZipList虽然节省内存&am…

【Bio】基础生物学 - 细胞 cell

文章目录1. 细胞2. 原核细胞 真核细胞3. 细胞器4. 细胞核5. 动物细胞5.1 细胞质5.2 核糖体5.3 内质网6. 植物细胞6.1 液泡6.2 线粒体6.3 叶绿体Ref1. 细胞 生命系统的结构层次依次为&#xff1a; 细胞 (cell)\blue{\text{细胞 (cell)}}细胞 (cell) →\rightarrow→ 组织 (tiss…

玩转MySQL:程序中的“田氏代齐”,InnoDB为何能替换MyISAM?

引言 MySQL是一款支持拔插式引擎的数据库&#xff0c;在开发过程中你可以根据业务特性&#xff0c;从支持的诸多引擎中选择一款适合的&#xff0c;例如MyISAM、InnoDB、Merge、Memory(HEAP)、BDB(BerkeleyDB)、Example、Federated、Archive、CSV、Blackhole..... 不过虽然各款…

[附源码]java毕业设计全国人口普查管理系统论文

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

LeetCode刷题复盘笔记—一文搞懂746. 使用最小花费爬楼梯(动态规划系列第二篇)

今日主要总结一下动态规划的一道题目&#xff0c;746. 使用最小花费爬楼梯 题目&#xff1a;746. 使用最小花费爬楼梯 题目描述&#xff1a; 给你一个整数数组 cost &#xff0c;其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用&#xff0c;即可选择…

Linux之关于Nginx

目录 1、什么是Nginx&#xff1f; 1.1、负载均衡&#xff1a;流量分摊​编辑 1. 2、反向代理 &#xff1a;处理外网访问内网问题 1.3、动静分离:判断动态请求还是静态请求&#xff0c;选择性的访问指定服务器 2、Nginx的使用 2.1.Nginx安装 2.1.1 添…

11月27日PMI认证才聚各考点防疫要求,PMP考生必看

11月27日深圳才聚、珠海才聚、东莞才聚、南宁才聚防疫要求及如下&#xff1a; 注意&#xff1a;由于疫情防控影响&#xff0c;以下城市的考试将延期举办&#xff0c;该考点的考生无需做任何操作。 北京、天津、石家庄、廊坊、保定、哈尔滨、大庆、呼和浩特、太原、郑州、兰州…

【王道计算机网络笔记】计算机网络体系结构-计算机网络概述

文章目录计算机网络的概念计算机网络的功能计算机网络的组成计算机网络的分类标准化工作及相关组织相关组织计算机网络的性能指标速率带宽吞吐量时延时延带宽积往返时延RTT利用率计算机网络的概念 计算机网络&#xff1a;是一个分散的、具有独立功能的计算机系统&#xff0c;通…

[附源码]java毕业设计汽车租赁系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

绿竹生物获上市“大路条”:融资不搞研发去理财,孔健下什么棋?

11月19日&#xff0c;绿竹生物发布消息称&#xff0c;该公司于2022年11月11日获得中国证监会关于首次公开发行境外上市外资股&#xff08;H股&#xff09;及境内未上市股份全流通&#xff08;即“大路条”&#xff09;的批复&#xff0c;下一步将根据香港联交所的聆讯进度安排及…

【JavaSE】接口

前言&#xff1a; 作者简介&#xff1a;爱吃大白菜1132 人生格言:纸上得来终觉浅&#xff0c;绝知此事要躬行 如果文章知识点有错误的地方不吝赐教&#xff0c;和大家一起学习&#xff0c;一起进步&#xff01; 如果觉得博主文章还不错的话&#xff0c;希望三连支持&#xff01…

web课程设计网页规划与设计----公司官网带轮播图 (页面精美 1页)

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 公司官网网站 | 企业官网 | 酒店官网 | 等网站的设计与制 | HTML期末大学生网页设计作业&#xff0c;Web大学生网页 HTML&#xff1a;结构 CSS&#…