当前位置: 首页 > news >正文

内部排序——一文速通

一、理解内部排序的定义和各种排序算法基本思想及其特点

(1)内部排序的定义

内部排序​​ 指的是待排序的所有记录(数据)都存放在计算机的内存中进行排序的过程。特点:数据量不能大于内存容量,适用于中小规模的数据集。

(2)各种排序算法基本思想及其特点

(1)插入类排序​

  • ​直接插入排序​

    • ​基本思想​​:每次将一个待排序的记录按其关键字大小插入到前面已排好序的子序列中直到全部记录插入完成。

    • ​特点​​:稳定、简单,适用于小规模或基本有序的数据。时间复杂度最好 O(n),平均 O(n²)。

  • ​希尔排序​

    • ​基本思想​​:将整个序列分割成若干子序列(按增量分割),分别进行直接插入排序;然后逐步缩小增量,直至增量为1,对整个序列排序。

    • ​特点​​:不稳定,是插入排序的改进,适用于中等规模数据。

​(2)交换类排序​

  • ​冒泡排序​

    • ​基本思想​​:重复比较相邻元素,如果逆序则交换,这样每一轮将最大(或最小)元素“浮”到顶端。

    • ​特点​​:稳定、简单,效率低,适合教学。

  • ​快速排序​

    • ​基本思想​​:选取一个基准元素,通过一趟排序将序列分成两部分,左边都比基准小,右边都比基准大,然后递归对两部分排序。

    • ​特点​​:不稳定,平均性能很好 O(n log n),是常用排序算法。

​(3)选择类排序​

  • ​简单选择排序​

    • ​基本思想​​:每次从待排序序列中选择最小(或最大)元素,放到已排序序列末尾。

    • ​特点​​:不稳定,交换次数少,但时间复杂度总是 O(n²)。

  • ​堆排序​

    • ​基本思想​​:将序列构建成一个大顶堆(或小顶堆),然后每次取出堆顶元素(最大或最小),再调整堆,重复直到堆为空。

    • ​特点​​:不稳定,适合大规模数据,时间复杂度 O(n log n),且只需 O(1) 额外空间。

​(4)归并类排序​

  • ​归并排序​

    • ​基本思想​​:将序列递归地分成两半,分别排序,然后将两个有序子序列合并成一个有序序列。

    • ​特点​​:稳定,时间复杂度 O(n log n),但需要 O(n) 额外空间。

​(5)基数排序(分配类排序)​

  • ​基本思想​​:按位排序,从最低位到最高位(或反之)依次进行稳定排序(如桶排序)。

  • ​特点​​:稳定,适合整数或字符串排序,时间复杂度 O(d*n),d 为位数。

二、掌握插入,希尔,快速,堆等方法的排序过程

直接插入排序过程(基于插入

每次将一个待排序的记录按其关键字大小插入到前面已排好序的子序列中直到全部记录插入完成。

折半插入排序过程(基于插入

核心思路:先用折半查找找到应该插入的位置,再移动元素

希尔排序过程(基于插入

冒泡排序过程(基于交换)

冒泡排序每趟就能确定一个元素的最终位置。

快速排序过程(基于交换)

快速排序每趟就能确定一个元素的最终位置。

​简单选择排序​(基于选择)

每一趟在待排序元素中选取关键字最小的元素加入有序子序列

堆排序​(基于选择)

大根堆

小根堆

建立大根堆

先按层次遍历的顺序依据数组建立一个二叉树。从数组下标最大的数组元素对于的非结点开始把所有非叶结点都检查一遍,是否满足大根堆的要求,如果不满足,则将当前结点与更大的一个孩子互换。若元素互换破坏了下一级的堆,则采用相同的方法继续往下调整(小元素不断“下坠”)

具体过程看视频:(从05:08开始看,画起来太麻烦了)https://www.bilibili.com/video/BV1b7411N798?spm_id_from=333.788.videopod.sections&vd_source=af664767642e6eb0be84623726e5e7fe&p=96

基于大根堆进行排序

每一趟将堆顶元素加入有序子序列(与待排序序列中的最后一个元素交换)

具体过程看视频:(从14:38开始看,画起来太麻烦了)

https://www.bilibili.com/video/BV1b7411N798?spm_id_from=333.788.videopod.sections&vd_source=af664767642e6eb0be84623726e5e7fe&p=96

归并排序

把两个或多个已经有序的序列合并成一个有序序列

基数排序

三、理解各种内部排序算法的优缺点、各种排序算法的时间效率分析


记忆不稳定的算法口诀:简单希尔快速堆。除此之外的都是稳定的。
记忆每趟排序结束后,能确保有一个元素到达其最终位置的排序算法口诀:简单快速堆泡

http://www.dtcms.com/a/498884.html

相关文章:

  • 数据结构——东方财富掘金量化速成学习(python)
  • 做网站商城项目的流程深圳专业网站设计哪家好
  • 【招聘】-音视频行业企业的招聘分析
  • css word属性
  • 晋中网站seo芯火信息做网站怎么样
  • Orleans 流系统握手机制时序图
  • 【C + +】异常处理:深度解析与实战
  • 《从理论到实践:红黑树的自平衡机制与C++高效实现指南》
  • 将iOS/macOS应用上架至App Store
  • 海南做网站电话如今做哪个网站能致富
  • 数据结构——栈在递归中的应用
  • java.net 包详解
  • Three.js光照技术详解:为3D场景注入灵魂
  • 企业门户网站系统下载网店平台
  • 监听指定事件然后触发鼠标点击操作等,智能文本识别按键工具的使用教程
  • connect 的断线重连
  • wp-config.php文件是什么
  • 编译esp-idf小智报错
  • 微信小程序开发踩坑记:从AI工具翻车到找到合适方案
  • 《3D植被建模痛点解决:开放世界层级实例化+GPU批处理优化方案》
  • openharmony之分布式蓝牙实现多功能场景设备协同实战
  • Linux ARM 程序启动全链路解析:从 shell 到 main(含动态/静态链接)
  • 具身智能黑客松之旅002
  • 免费发布产品网站网站权重能带来什么作用
  • 碰一碰发视频 系统源码 /PHP 语言开发方案
  • 网站大学报名官网入口网站插件代码下载
  • Cors能干什么?为什么需要它?
  • 远程办公自由:rdesktop+cpolar让Windows桌面随身而行
  • 计算机网络(tcp_socket )
  • 【小白笔记】在编程中,如何将概念上的数据结构(比如“树”)转化为代码中具体的数据类型和对象