数据结构学习笔记----排序

2023-10-26

排序,就是要整理表中的元素,使之按关键字递增(或递减)有序排列。
如果待排序的表中,存在有多个关键字相同的元素,经过排序后这些具有相同关键字的元素之间的相对
次序保持不变,则称这种 排序算法是稳定的
在排序过程中,若整个表都是放在内存中处理,排序时不涉及数据的内、外存交换,则称之为 内排序
反之,若排序过程中要进行数据的内、外存交换,则称之为 外排序

数据结构中主要讲到了插入排序,交换排序,选择排序,归并排序,基数排序,外排序等几种排序,
每种排序都有不同的性能,根据情况来选择合适的排序算法。
其中插入排序,交换排序,选择排序,归并排序是基于比较的排序算法;
基数排序是不基于比较的排序算法。

基于比较的排序算法:
插入排序----直接插入排序算法:时间复杂度O(n^2),空间复杂度O(1),与待排序数据的顺序有关,稳定的
                    折半插入排序:时间复杂度O(n^2),空间复杂度O(1),与待排序数据的顺序有关,稳定的
                    希尔(Shell)排序:时间复杂度 O(n^1.3),空间复杂度O(1),与待排序数据的顺序有关,不稳定的
交换排序----冒泡排序算法:时间复杂度O(n^2),空间复杂度O(1),与待排序数据的顺序有关,稳定的
                    快速排序算法:时间复杂度 O(nlogn),空间复杂度O(logn),与待排序数据的顺序有关,不稳定的
选择排序----简单选择排序算法:时间复杂度O(n^2),空间复杂度O(1),与待排序数据的顺序无关,不稳定的
                    堆排序:时间复杂度 O(nlogn),空间复杂度O(1),与待排序数据的顺序无关,不稳定的
归并排序----二路归并排序算法:时间复杂度 O(nlogn),空间复杂度O(n),与待排序数据的顺序无关,稳定的

不基于比较的排序算法:
基数排序----最低位优先(LSD),最高位优先(MSD)
                    时间复杂度 O(d*(n+r)),空间复杂度O(r),与待排序数据的顺序无关,稳定的
                        d为关键字的元组,如关键字为456,则d为3;
                        r为基数,例如对于二进制数r=2,十进制数r=10;
                        n为待排序的关键字的个数。
外排序:外排序的基本过程为分两个步骤:生成若干初始归并段(顺串)和多路归并。
              多路归并就是将若干个有序文件归并成一个有序文件。
               多路归并有两种实现方法:一种是败者树,一种是最佳归并树(带权路径长度最短的K阶哈夫曼树)
各种排序的基本思路没有在笔记中记录。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构学习笔记----排序 的相关文章

  • FRP运行过程中发现的安全漏洞,没有办法修复

    最近经常发送frp搭建外网访问内网不稳定 经过多次排查发现一个可怕的漏洞 这些 goroutines 结束之前正在等待一个 channel 关闭 而这个 channel 永远不会关闭 一个常见的死锁问题 这个进程毫无任何理由吃掉了 90 的
  • Hive Order By、Sort By、Distrbute By、Cluster By区别

    1 Order By 全局排序 只有一个Reducer 2 Sort By 分区内有序 3 Distrbute By 类似MR中Partition 进行分区 结合sort by使用 4 Cluster By 当Distribute by和S
  • XXX packages are looking for funding run `npm fund` for details解决方法

    今天用VScode导入一个vue项目 实现npm install 安装依赖遇到了一些小问题 搞了好久才终于搞好了 下面来直接进入主题 当在终端执行npm install时出现这种情况 然后我们再执行npm update 接下来我们执行npm
  • Mybatis框架(复杂动态SQL),一对一,一对多,多对多

    复合条件查询 动态SQL MyBatis 的强大特性之一便是它的动态 SQL 如果你有使用 JDBC 或其它类似框架的经验 你就能体会到根据不同条件拼接 SQL 语句的痛苦 例如拼接时要确保不能忘记添加必要的空格 还要注意去掉列表最后一个列
  • 哈工大OS实验五---基于内核栈切换的进程切换

    基于内核栈切换的进程切换 实验目的 将linux 0 11中采用的TSS切换部分去掉 取而代之的是基于堆栈的切换程序 写成一段基于堆栈切换的代码 要实现基于内核栈的任务切换 主要完成如下三件工作 重写switch to 将重写的switch
  • Mysql高级部分系列(四)

    1 数据库的设计规范 1 1 为什么不使用自增ID 1 1 1 自增ID的问题 自增ID做主键 简单易懂 几乎所有数据库都支持自增类型 只是实现上各自有所不同而已 自增ID除了简单 其他都是缺点 总体来看存在以下几方面的问题 1 1 1 1
  • idea 部署git总结

    idea 部署git总结 github密匙快捷获取方法 idea将本地项目上传到远程仓库GitHub 报错 error src refspec master does not match any Everything up to date
  • 【线程池上篇】4种常用线程池介绍

    一 线程池介绍 概念 使用原因 线程池就是提前创建好一些线程放在一起的集合 线程池的工作模式时拿到任务后在自己的池子里找看谁闲着 这个活就让谁去干 多线程模式下 系统需要不断地启动和关闭新线程 这个过程不但消耗资源而在存在线程间过渡的不安全
  • C 程序结构

    原文链接 https www runoob com cprogramming c program structure html 在我们学习 C 语言的基本构建块之前 让我们先来看看一个最小的 C 程序结构 在接下来的章节中可以以此作为参考
  • 通过python技术获取甲流分布数据

    近期 多地学校出现因甲流导致的班级停课 儿科甲流患者就诊量呈数倍增长 此轮甲流为何如此严重 感染甲流之后会出现哪些症状 经过专家的介绍甲流之所以这么严重有这些原因导致的 一 疫情完全放开后很多孩子不戴口罩了 预防流感的作用会下降 二是 免疫
  • background-position的向右对齐用法

    一直只知道background position x轴位置 y轴位置 如果靠近左边偏移7px就写成background position 7px 20px 这样的 但是像右要怎么办 以前我是傻傻的给父容器计算了宽度 然后就向左偏移固定的宽度
  • 为什么推荐科研工作使用git

    为什么推荐科研工作使用git 每个人都会犯错 而使用Git 的最大好处就在于 几乎在所有的情况下你都能 撤消 你的错误操作 比如如果你忘记了把一个小小的改动包含进来 因此你要改正你的上个提交 又或者你想要撤销一个完整的提交 因为这个功能有可
  • 【C/C++】获取计算机CPUID序列号

    1 GetGPUId h文件 pragma once include
  • 【解决报错】c#使用ManagedWifi报错出现“不能作为非托管结构进行封送处理;无法计算有意义的大小或偏移量。”

    最近在做C 上位机wifi通信的时候使用了MangedWifi库 但这个库并没有想象中好用 遇到了不少问题 首先网上流传的例程又不能运行 再接着当wifi断开或连接时会异常退出的bug 通过反反复复的调试后 我最终确认了错误的来源 发现是M

随机推荐

  • 微信公众号 config:fail,Error: 系统错误,错误码:1

    微信公众号开发 微信开发者工具 打开调试模式 出现config fail Error 系统错误 错误码 1 查看一下wx config是否成功渲染了 重新赋值 修改后的代码如下 chooseImage var this this 新增代码块
  • 生产环境lvm磁盘扩容!!!

    一次就好 亲身体验生产环境lvm磁盘扩容 这一天体验了真正的生产环境 三急 中午客户打电话说报表几个小时没更新了 是不是你们系统有问题啊 于是开始排除发现磁盘空间满了 需要进行扩容 咱又没有扩容经验潜心研究一下午 终于得出结论 以下将描述我
  • 如何将计算机的硬盘分割,电脑硬盘如何快速分区

    电脑硬盘一般有2个盘或者4个盘 怎样自己增添一个硬盘 或者来均分电脑那300G或者500G的硬盘空间呢 今天学习啦小编给大家介绍下电脑硬盘如何快速分区吧 电脑硬盘快速分区方法一 1 点击我的电脑 点击鼠标右键 选择管理项 2 打开后选择磁盘
  • Python基础教程,Python入门教程(非常详细)

    Python 英文本意为 蟒蛇 直到 1989 年荷兰人 Guido van Rossum 简称 Guido 发明了一种面向对象的解释型编程语言 后续会介绍 并将其命名为 Python 才赋予了它表示一门编程语言的含义 图 1 Python
  • C# TCPclient 服务器保持长连接的一种办法(变相的心跳包功能)

    本文章向大家介绍C TCPclient 服务器保持长连接的一种办法 变相的心跳包功能 主要包括C TCPclient 服务器保持长连接的一种办法 变相的心跳包功能 使用实例 应用技巧 基本知识点总结和需要注意事项 具有一定的参考价值 需要的
  • neo4j从安装到远程访问一气呵成

    从安装到远程访问配置 安装Java JDK JDK下载 JDK配置环境 安装Neo4j Neo4j下载 系统变量设置 通过控制台启动 Neo4j 注册 Neo4j 服务 启动 Neo4j 服务 停止 Neo4j 服务 重启 Neo4j 服务
  • 【千律】C++基础:类的派生与继承

    include
  • postman环境设置

    本来是想在另一篇博客基础上接着写的 但是考虑到不想搞太长 干脆分开写 看起来更直接清楚一下 使用postman调接口 经常会遇到不同的的环境 但是接口是一样的 不想添加太多没用的请求 因为除了同一个接口请求要写多遍 更重要的是环境地址和端口
  • gprmax3.0安装、GPU加速(cuda)配置、通过python使用gprmax的问题

    gprmax3 0安装 GPU加速 cuda 配置 通过python使用gprmax的问题 一 安装过程 二 通过NVIDIA CUDA使用GPU加速功能 三 通过VS2019或VScode操纵gprmax 鉴于网上其他教程版本较低 本篇记
  • 【GD32篇】驱动AD7616完成数据采集

    1 AD7616介绍 1 1 概述 AD7616 是一款 16 位 DAS 数据采集系统 支持对 16 个通道进行双路同步采样 AD7616 采用 5 V 单电源供电 可以处理 10 V 5 V 和 2 5 V 真双极性输入信号 同时每对通
  • 代码随想录算法训练营第三天

    今天是算法训练营的第三天 写了454 四数相加 II这道题目 力扣链接 代码随想录链接 代码如下 class Solution def fourSumCount self nums1 List int nums2 List int nums
  • 在window模式下硬盘安装linux

    随着linux的迅速发展和其强大的安全体系的成熟 越来越多的人希望能学习linux 但也有不愿很快的离开window那中友好的界面 最好的办法就是在你的PC机上做两个系统 这样就可以学习和娱乐两不误 等到自己在linux上学习的狠命熟练的时
  • Android APK 程序实现自动更新,java服务命令处理无弹窗,终极解决方案

    安卓更新方式 网上五花八门 但是真正实现apk自动更新无痕迹的方式 少之又少 毕竟不要钱的方式 稳定的方式才能让开发者在困难中脱颖而出 安卓程序如何做到自动更新 安卓程序如何实现无弹框更新 1 安卓apk自动更新方式 a 第三方平台更新ap
  • 无向图有向图最小环

    floyd求 for int k 1 k lt n k for int i 1 i
  • 合肥先进光源高速数据采集网的规划

    合肥先进光源束测后台的初步设计 这里的网络相关的部分摘出来换个名字重新整理一下 合肥光源中 没有把数据量大的设备比如摄像头 示波器规划进单独的网络 所有的设备都直接接入控制网 运行实践的过程中 有过高帧率的一个摄像头就拖慢整个网络响应的情况
  • Java基础11--时间日期

    Java基础11 时间日期 文章目录 Java基础11 时间日期 获取当前日期时间 日期比较 使用 SimpleDateFormat 格式化日期 日期和时间的格式化编码 解析字符串为时间 Java 休眠 sleep Calendar类 Ca
  • I/O多路复用(select、poll、epoll)

    基本思想 1 先构造一张有关文件描述符的表 然后使用我们的select poll epoll函数 2 我们的应用程序会将这张表复制给内核 3 内核层初始化表中的需要检测的描述符 4 当检测到有文件操作时 则立即将文件描述符作为标志并返回给应
  • Pytorch profiler with tensorboard.

    文章目录 前言 你将学到什么 一 准备数据集和模型 二 使用profiler来记录执行的事件 三 执行profiler 四 使用TensorBoard来观察结果并对模型性能做出分析 最后 总结 前言 你将学到什么 注意 以下所有的内容均来自
  • innerHTML的作用及用法。

    对innerHTML的用法有些模糊 今天来总结一下 1 innerHTML有两个作用 1 获取对象的内容 2 向对象插入内容 例 这是内容 由于id是唯一的 我们可以不获取id 通过 a innerHTML 来获取id为a的对象的内嵌内容
  • 数据结构学习笔记----排序

    排序 就是要整理表中的元素 使之按关键字递增 或递减 有序排列 如果待排序的表中 存在有多个关键字相同的元素 经过排序后这些具有相同关键字的元素之间的相对 次序保持不变 则称这种 排序算法是稳定的 在排序过程中 若整个表都是放在内存中处理