史上最全排序算法全面总结

2023-11-15

考察点

在信息学奥赛初赛中对于排序算法的考察主要体现在以下几方面:
1、时间复杂度
2、稳定性
3、最坏情况下移动次数
4、移动次数与关键字顺序关系

先看熟记知识点

在这里插入图片描述
1.关于稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。

不稳定:快选堆希(快速排序、选择排序、堆排序、希尔排序)

稳 定:插冒归计基(简单插入排序、冒泡排序、归并排序、计数排序、基数排序)

2.关于移动次数和关键字顺序无关的排序
顺口溜:一堆(堆排序)海龟(归并排序)选(选择排序)基(基数排序)友

再细品每个排序算法

第一类 交换排序
1、冒泡排序
基本思想:两两比较相邻记录的关键字,如果反序则交换

时间复杂度:最好的情况为O(n),最坏的情况是O(n2) ,平均复杂度O(n2)

稳定性:稳定

排序演示

2、快速排序
基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

时间复杂度:最坏情况下O(n2)最好情况下O(nlogn),平均情况下O(nlogn)

稳定性:不稳定

排序演示

第二类 插入排序
1、简单插入排序
基本思想:将一个记录插入到已经排好序的有序表中, 从而得到一个新的,记录数增1的有序表

时间复杂度:最坏情况O(n2),最好情况O(n),平均情况O(n2); 比冒泡法和选择排序的性能要更好一些

稳定性:稳定

2、希尔排序
基本思想:可以理解成插入排序的优化版本。
(1)初始间隔N=数组长度/2
(2)对间隔为N的分组进行插入排序,直至有序
(3)缩小N值,N=N/2;
(4)重复2、3步骤,直至间隔N=1

时间复杂度:最坏情况O(n2),最好情况O(n),平均情况O(n3/2),要好于直接插入排序的O(n^2)

稳定性:不稳定

算法演示

第三类 选择排序
1、简单选择排序
基本思想:通过n-i次关键字之间的比较,从n-i+1 个记录中选择关键字最小的记录,并和第i(1<=i<=n)个记录交换之

时间复杂度:O(n2)

移动次数与关键字顺序无关

稳定性:不稳定

算法演示

2、堆排序
基本思想:将待排序的序列构造成一个大顶堆.此时,整个序列的最大值就是堆顶 的根结点.将它移走(其实就是将其与堆数组的末尾元素交换, 此时末尾元素就是最大值),然后将剩余的n-1个序列重新构造成一个堆,这样就会得到n个元素的次大值.如此反复执行,便能得到一个有序序列了。

时间复杂度: O(nlogn),

移动次数与关键字顺序无关

稳定性:不稳定

算法演示

第四类 归并排序
1、归并排序
基本思想:假设初始序列含有n个记录,则可以看成n个有序的子序列,每个子序列的长度为1,然后两两归并,得到(不小于n/2的最小整数)个长度为2或1的有序子序列,再两两归并,…如此重复,直至得到一个长度为n的有序序列为止,这种排序方法称为2路归并排序。

时间复杂度:O(nlogn),

移动次数与关键字顺序无关

稳定性:稳定

算法演示

上述7种都是比较排序,下面3种都是非比较排序,理论上可以达到O(n),比比较排序要快,但是这3种都是有其应用背景才能发挥作用的,否则适得其反。

第五类 非比较排序
1、计数排序
基本思想:计数排序使用一个额外的数组C,其中第i个元素是待排序数组A中值等于i的元素的个数。然后根据数组C来将A中的元素排到正确的位置。

算法的步骤如下:

(1)找出待排序的数组中最大和最小的元素
(2)统计数组中每个值为i的元素出现的次数,存入数组C的第i项
(3)对所有的计数累加(从C中的位置为1的元素开始,每一项和前一项相加)
(4)反向填充目标数组:将每个元素i放在新数组的第C(i)项,每放一个元素就将C(i)减去1

时间复杂度:O(n+k)

稳定性:稳定

算法演示

2、桶排序
基本思想:将数组分到有限数量的桶子里。每个桶子再个别排序

时间复杂度:O(n+k)

稳定性:稳定

算法演示

3、基数排序
基本思想:将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。

时间复杂度:O(n*k)

稳定性:稳定

算法演示

相应练习题目

在这里插入图片描述
1、若要对1000个元素排序,要求既快又稳定,则最好采用(B )方法。
A.直接插入排序
B.归并排序
C.堆排序
D.快速排序
2、若要从1000个元素中得到10个最小值元素,最好采用(C )方法。
A.直接插入排序
B.直接选择排序
C.堆排序
D.快速排序
3、若一个元素序列基本有序,则选用( A)方法较快。
A.直接插入排序
B.简单选择排序
C.堆排序
D.快速排序
4、在平均情况下速度最快的排序方法为(D )
A.直接选择排序
B.归并排序
C.堆排序
D.快速排序
5、以下需要辅助空间最少的排序方法为(A )
A.基数排序
B.归并排序
C.堆排序
D.快速排序
6、对待排序的元素序列进行划分,将其分为左、右两个子序列,再对两个子序列施加同样的排序操作,直到子序列为空或只剩一个元素为止。这样的排序方法是( C)。
A.直接选择排序
B.直接插入排序
C.快速排序
D.起泡排序

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

史上最全排序算法全面总结 的相关文章

随机推荐

  • JAVA中的反射机制以及在Spring中的应用

    文章目录 一 反射机制 二 反射机制的使用 Class类 三 为什么要使用反射 3 1 静态编译 3 2 动态编译 3 3 反射的好处 3 4 反射的缺点 四 Spring IOC中的体现 4 1 Spring IOC的实现方式 4 2 代
  • linux内核知识图谱

    根据 深入linux内核架构 linux内核设计与实现 深入理解linux内核 得出linux内核的大类知识模块 进行后续主题式学习
  • 如何在react中使用websocket

    一 如何引用websocket npm install save react websocket 二 在组件中如何使用 1 先封装一个websocket组件 import React from react import Websocket
  • 在HTML页面中引用Markdown编辑器(Editor.md)

    目录 1 下载Ediotor md 2 引入Ediotor md 3 确定Ediotor md在哪里显示 最近写博客项目 用到了Markdown编辑器 这里介绍一款国内好用的Markdown编辑器 Editor md 下面介绍一下该编辑器以
  • ElementUI的表单效验问题 (一个页面两个form(数据相似))

    两个form 注意 两个表单必须绑定不同的 key key为字符串 否则 vue看两个表单数据大致相同就会将其上面的复用 导致效验不生效 rules
  • 论述GIS当前现状以及未来的发展前景

    GIS是空间技术和信息技术的交叉学科 相关领域的研究热点都有可能成为GIS的发展趋势 GIS的技术环节无外乎数据获取 数据分析 数据呈现三个方面 从近年的发展情况看 GIS可能在这三个方面都有着激动人心的前景 一 数据获取 数据是GIS的基
  • 警告:检测到时钟错误。您的创建可能是不完整的。

    问题 make 2 Warning File CMakeFiles MultiCol SLAM dir depend make has modification time 24688 s in the future make 2 警告 检测
  • 模式识别 - 名词解释整理

    模式识别 模式识别是指把对象根据其特征归到若干类别中适当的一类 模式识别也称为模式分类 模式 模式是指因素间存在确定性或随机性规律的对象 过程或事件的集合 识别 识别就是把对象分门别类地认出来 样本 sample 所研究对象的一个个体 样本
  • Python3中参数*args和**kwargs介绍

    在Python中 我们可以使用两种特殊符号将可变数量的参数传递给函数 args和 kwargs 你可以使用任何单词代替args和kwargs 但通常做法是使用args和kwargs args允许函数接受任意数量的位置参数 positiona
  • vue学习-01vue入门

    Vue官网地址 https cn vuejs org Vue介绍 Vue 读音 vju 类似于 view 是一套用于构建用户界面的渐进式框架 与其它大型框架不同的是 Vue 被设计为可以自底向上逐层应用 Vue 的核心库只关注视图层 不仅易
  • C++模拟鼠标移动及单击实现代码

    摘要 本文分享了如何通过代码实现重复点击按钮 要实现该功能有个关键点需要注意 许多软件的按钮不是一个窗口 所以无法通过枚举窗口或者查找子窗口来定位按钮 本文通过直接定位按钮位置来避免这个问题 该程序的使用方法 管理员运行程序 移动鼠标指针到
  • C++ 预处理器

    http www runoob com cplusplus cpp preprocessor html
  • 虚拟专用网之L2TP协议介绍

    目录 L2TP简介 L2TP构建图解 L2TP建立及拆除流程 L2TP隧道的建立 L2TP会话的建立 L2TP隧道和会话维护和拆除流程 L2TP协议栈结构及数据包的封装过程 L2TP隧道和会话的验证过程 L2TP和PPTP的区别 L2TP简
  • z字形扫描

    z字形扫描 类别 数组 时间限制 1S 内存限制 256Kb 问题描述 在图像编码的算法中 需要将一个给定的方形矩阵进行Z字形扫描 Zigzag Scan 给定一个m n的矩阵 Z字形扫描的过程如下图所示 对于下面给出的4 4的矩阵 1 5
  • android studio从git上克隆项目显示the directory already exists and it is not empty

    英文的意思能看懂 文件夹已存在并且不为空 但是网上百度了一下貌似没有完完整整是这句话的问题 我还纳闷怎么克隆不下来 我是想把项目克隆下来到workspace里面 workspace里面本来就还有其他项目在 原来克隆操作不会帮你生成跟目录 你
  • Android 10.0 系统settings详情页 卸载修改为停止,禁止卸载app功能实现

    1 概述 在10 0的系统rom定制化功能的开发过程中 在一些系统预安装的app中 在Launcher3中可以通过拖拽然后卸载 这个限制卸载可以在前面的博客中禁止卸载这些预安装的app 然后就需要在系统Settings详情页来禁止app的卸
  • C语言 用户输入运算数和四则运算符,输出计算结果

    用C语言中简单的语句可以实现四则运算 1 if语句 include
  • 翻译 第11章 of IEEE Std 1666-2011 IEEE Standard for Standard SystemC Language Reference Manual

    11 TLM 2 0 core interfaces 11 TLM 2 0 核心接口 In addition to the core interfaces from TLM 1 TLM 2 0 adds blocking and non b
  • 如何把笔记本做台式机的副屏(一套键鼠控制两台电脑)

    通过一套键鼠控制两台电脑 前提 安装所需的软件 一 简介 二 安装 2 1 小技巧 前提 两台电脑在同一个局域网内 并且均为windows操作系统 例如两台电脑链接的同一个WIFI 或者笔记本无线连接路由 台式机插网线链接路由 只有在同一个
  • 史上最全排序算法全面总结

    考察点 在信息学奥赛初赛中对于排序算法的考察主要体现在以下几方面 1 时间复杂度 2 稳定性 3 最坏情况下移动次数 4 移动次数与关键字顺序关系 先看熟记知识点 1 关于稳定性 假定在待排序的记录序列中 存在多个具有相同的关键字的记录 若