初阶数据结构【TOP】- 16. 经典八大排序对比

文章目录

  • 前言
  • 一、相关复杂度
  • 二、相关稳定性
  • 三、表格总结
  • 总结


前言


本篇文章笔者将会对排序算法的所有时间复杂度和稳定性进行分析.

一、相关复杂度

简单选择排序

首先,选择排序的效率是不高的 , 时间复杂度考虑的是最坏情况 , 那么对于选择排序来说, 最坏情况下需要进行 n-1 次选择和交换操作 , 那么对于 n 个数来说就是 N^2.
但选择排序是不额外开辟空间的.

故:

时间复杂度 : O(N^2) .

空间复杂度 : O(1) .

冒泡排序

考虑最坏情况下, 一个数与每个数都要交换 , 才可达有序 , 则 : n 个数 就会进行 n-1 次交换.

故:

时间复杂度 : O(N^2) .

空间复杂度 : O(1) .

堆排序

堆排涉及向下调整算法 , 每次交换后就要与末尾元素交换进行堆的调整 , 最坏情况下 , 要调整 log N 层 , 其中共 n 个数 .

故:

时间复杂度 : O(N * log N) .

空间复杂度 : O(1) .

直接插入排序

该排序的思想是 [0 , end] 有序 ,end + 1 位置插入 . 那么最坏情况就是该序列逆序时 , 要排升序 , 则 n 个数要进行 n - 1 次插入 . 那么最好的情况就是有序时 , 将 end + 1位置插入 , 只需遍历一遍就可以达到效果 .

故:

时间复杂度最坏情况 : O(N ^ 2) .

时间复杂度最好情况 : O(N) .

时间复杂度 : 介于 O(N) ~ O(N ^ 2) 之间.

空间复杂度 : O(1) .

希尔排序

本排序需要重点记忆 !

时间复杂度 : O(N ^ 1.3 )

空间复杂度 : O(1) .

快速排序

快排每次取中 , 递归左边,右边. 会涉及递归的过程 , N 个数会递归 log N 层.
但最坏情况 , 当 key 选到原序列的最大或最小时 , 导致划分一边子序列为空
一边子序列为 n - 1 , 那么递归深度就会 n - 1 层 .

故:

时间复杂度最坏情况 : O(N ^ 2) .

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

时间复杂度 : 为了更好效率,一般追求 O(N*logN).

空间复杂度 : O(log N) .

重点理解快排空间复杂度

为什么是 log N 呢 ? 首先 ,快排涉及递归 , 递归的深度是 log N , 二分的递归情况下就会多开辟 log N 个空间.

归并排序

归并排序中要借助第三方数组 , 并且左右有序才会归并. 所以要涉及分割左右子序列.

故:

时间复杂度 : O(N ^ log N)

空间复杂度 : O(N) .

计数排序

计数排序也是借助第三方数组 , 但该排序只需遍历一遍原数组就可以达到排序的效果.

故:

时间复杂度 : O(N)

空间复杂度 : O(N) .


二、相关稳定性

稳定性的分析可结合相关排序的思想理解 !

稳定性介绍

稳定性指 : 排序前后两个相等的数的相对位置 .

相对位置改变 , 即 : 该排序不稳定.

相对位置没有改变 , 即 : 该排序稳定.

在这里插入图片描述

简单选择排序

重点理解 !

思想: 第一次在原始序列中选择一个最小的和最左边的交换 , 依次选择 ,直至有序.

特殊情况:

在这里插入图片描述
以上这种情况 , 虽然保证了 1 的稳定性 , 但是对于 3 来说 ,其相对位置是发生改变的.

故: 简单排序是 不稳定 的.

冒泡排序

思想 : 相邻两个比较进行交换 , 相等时就不交换了 . 所以 ,相等的数的相对位置不会发生变化.

故: 冒泡排序是 稳定 的.

堆排序

思想 : 堆顶元素和堆最后一个元素要发生交换 , 交换以后还要进行堆调整. 这其中一定会发生相对位置的变化.

故: 排序是 不稳定 的.

直接插入排序

思想 : [ 0 , end ] 有序 , end + 1 位置插入 , 当 end + 1 位置大于有序中的某一位置时停止 --end ,进行插入 , 因为该排序不涉及交换 , 所以相等数的相对位置不会发生改变.

故: 直接插入排序是 稳定 的.

希尔排序

思想 : 分 gap 组 , 每组进行插入排序的思想 , 虽然也不涉及交换 , 但分为了不同组别在不同组的插入中会有相等数相对位置变化的情况 .

故: 希尔排序是 不稳定 的.

快速排序

思想 : 选 key , 左边找大, 右边找小 , 找到了交换 , 当左边做 key 时右边先走 , 那么相遇位置一定比 key 小 ,就要和 key 位置交换.

在这里插入图片描述
这样的场景 6 的相对位置发生改变 .

故: 快速排序是 不稳定 的.

归并排序

思想 : 左右有序开始归并 , 两个区间小的尾插到新的空间中 , 等于时两个顺序是不变的.

故: 归并排序是 稳定 的.


三、表格总结

在这里插入图片描述

蓝色部分为重点排序 , 红色部分需要特别注意 !!!

总结

以上是排序部分的所有内容 , 后续内容请持续关注 ~

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

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

相关文章

Postman断言与依赖接口测试详解!

在接口测试中,断言是不可或缺的一环。它不仅能够自动判断业务逻辑的正确性,还能确保接口的实际功能实现符合预期。Postman作为一款强大的接口测试工具,不仅支持发送HTTP请求和接收响应,还提供了丰富的断言功能,帮助测试…

基于 JAVASSM(Java + Spring + Spring MVC + MyBatis)框架开发一个九宫格日志系统

基于 JAVASSM(Java Spring Spring MVC MyBatis)框架开发一个九宫格日志系统 步骤一:需求分析 明确系统需要实现的功能,比如: 用户注册和登录添加日志(包含标题、内容、图片)查看日志列表…

003-Kotlin界面开发之声明式编程范式

概念本源 在界面程序开发中,有两个非常典型的编程范式:命令式编程和声明式编程。命令式编程是指通过编写一系列命令来描述程序的运行逻辑,而声明式编程则是通过编写一系列声明来描述程序的状态。在命令式编程中,程序员需要关心程…

华为海思招聘-芯片与器件设计工程师-模拟芯片方向- 机试题-真题套题题目——共8套(每套四十题)

华为海思招聘-芯片与器件设计工程师-模拟芯片方向- 机试题-真题套题题目分享——共九套(每套四十题) 岗位——芯片与器件设计工程师 岗位意向——模拟芯片 真题题目分享,完整题目,无答案(共8套) 实习岗位…

解决程序因缺少xinput1_3.dll无法运行的有效方法,有效修复丢失xinput1_3.dll

如果你的电脑在运行某些应用程序或游戏时提示“xinput1_3.dll丢失”或“找不到xinput1_3.dll”的错误消息,那么很可能是因为你的系统中缺少这个重要的DLL文件而导致的问题。那么电脑出现xinput1_3.dll丢失的问题时有哪些方法进行修复呢? 如何确定电脑是否…

入门网络安全工程师要学习哪些内容

🤟 基于入门网络安全/黑客打造的:👉黑客&网络安全入门&进阶学习资源包 大家都知道网络安全行业很火,这个行业因为国家政策趋势正在大力发展,大有可为!但很多人对网络安全工程师还是不了解,不知道网…

命令行参数、环境变量、地址空间

命令行参数: int main(int argc, char *argv[ ]),main的参数可带可不带。argc参数通常代表后面的char *argv的元素个数有多少。 在linux中会把输入的字符串存到char *argv[ ]中,在数组的结尾为NULL。 命令行参数可以让同一个程序可以通过不同…

Docker学习—Docker核心概念总结

核心概念总结 容器:容器就是将应用运行所需的所有内容比如代码、运行时环境,进行打包和隔离。 容器和虚拟机的对比 虚拟机是在同一个硬件上虚拟化出多个操作系统(OS)实例。 容器是在操作系统上进行虚拟化,用于隔离…

Java实战项目-基于SpringBoot的新能源汽车个性化推荐系统

博主介绍:✌Java徐师兄、7年大厂程序员经历。全网粉丝13w、csdn博客专家、掘金/华为云等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇🏻 不…

统信UOS设备驱动开发-常见问题

包含linux设备驱动开发的基础知识及统信UOS设备驱动的总体架构,常用的设备驱动开发调试优化手段及在环境搭建和代码编写过程中常见问题处理等。 文章目录 环境搭建如何编译驱动代码编写如何实现同源异构环境搭建 如何编译内核 下载并解压内核源码包,进入源码根目录,内核的编…

基于python主观题自动阅卷系统毕业设计项目

基于python主观题自动阅卷系统毕业设计项目 大家好,我是陈辰学长,一名在 Java 圈辛勤劳作的码农。今日,要和大家分享的是一款基于python主观题自动阅卷系统毕业设计。项目源码以及部署相关事宜,请联系陈辰学长,文末会…

详细分析WebStorageCache 基本知识

目录 1. 基本知识2. Demo 1. 基本知识 相关的源码如下:web-storage-cache WebStorageCache 是一个用于扩展 HTML5 的 localStorage 和 sessionStorage 的库,增加了超时时间管理和序列化功能。它可以存储 JSON 对象,并且在存储数据时可以方便…

如何用手机将驾驶证信息转为结构化Excel表格

在日常生活和工作中,我们经常需要将纸质文档或图片中的信息转化为结构化的电子数据,以便更好地进行管理和分析。驾驶证作为重要的个人证件,其信息的电子化也显得尤为重要。本文将详细介绍如何使用手机将驾驶证信息转化为结构化的Excel表格。 …

Idea自动生成mysql表DML语句

背景 在开发上线的时候,某个表会被多次修改,更改了多个字段。上线的时候需要变更线上数据表,会很麻烦。需要自己写很多个DML语句。 IDEA解决方案 使用IDEA的数据库插件可以很快的得到变更表的DML语句。 步骤: 勾选不同环境的两…

自动化细胞核分割与特征分析

自动化细胞核分割与特征分析 引言效果展示HoverNet概述HoverNet原理分析整体网络框架实例分割原理 HoverNet评估结果复现过程细胞核特征应用说明参考文献总结备注资源获取 本文所涉及所有资源均在传知代码平台可获取 引言 细胞核分割和分类在医学研究和临床诊断中具有重要意义…

[ZJCTF 2019]NiZhuanSiWei

[ZJCTF 2019]NiZhuanSiWei 审题 看到可以传入file,text,和password三个参数。 知识点 php伪协议,反序列化 解题 传入text,看到有file_get_content函数,这个函数表示读取$text文件里的值,返回字符串。 所…

Transformer究竟是什么?预训练又指什么?BERT

目录 Transformer究竟是什么? 预训练又指什么? BERT的影响力 Transformer究竟是什么? Transformer是一种基于自注意力机制(Self-Attention Mechanism)的神经网络架构,它最初是为解决机器翻译等序列到序列(Seq2Seq)任务而设计的。与传统的循环神经网络(RNN)或卷…

阿里云对象存储OSS

Alibaba Cloud OSS Alibaba Cloud OSS: 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。 1.引…

element plus中修改el-table的样式

文章目录 前情提要相关环境package.jsonvue代码结果 方式一直接看代码 方式二直接看代码 前情提要 因为项目中用到el-table的时候,需要将el-table表格的样式进行修改,将整个表格的背景颜色从白色变成透明,使得表格变得透明之后,展…

HTML前端页面设计静态网站

浅浅分享一下前端作业&#xff0c;大佬轻喷~ <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>一个网…