合集-常见的排序算法

摘要:本文记述了选择排序的基本思想和一份参考实现代码,并在说明了算法的性能后用随机数据进行了验证。 ◆ 思想 将第一个元素及其之后的所有元素作为待排序范围,通过一一比较,查找待排序范围内的最小元素,将其与范围内的第一个元素交换。然后将第二个元素之后的所有元素作为新的待排序范围。重复以上的比较、查找和交换, 阅读全文
posted @ 2024-04-02 14:42 green-cnblogs 阅读(25) 评论(0) 推荐(0) 编辑
摘要:本文记述了插入排序的基本思想和一份参考实现代码,并在说明了算法的性能后用随机数据进行了验证。 ◆ 思想 将第一个元素之后的所有元素作为待排序范围,将前面的所有元素作为已排序范围。通过一一比较,逐个交换已排序范围内比第二个元素大的所有元素,使第二个元素被插入到了正确的位置。然后将第二个元素之后的所有元 阅读全文
posted @ 2024-04-07 13:49 green-cnblogs 阅读(14) 评论(0) 推荐(0) 编辑
摘要:本文记述了希尔排序的基本思想和一份参考实现代码,并在说明了算法的性能后用随机数据进行了验证。 ◆ 思想 给定元素之间的间隔 h ,将所有间隔为 h 的元素作为独立的待排序范围,可以得到 h 个这样的子范围。针对每个子范围执行插入排序,使得任意间隔为 h 的元素是有序的。然后缩小间距 h,对新的子范围 阅读全文
posted @ 2024-04-16 11:00 green-cnblogs 阅读(32) 评论(0) 推荐(0) 编辑
摘要:本文记述了针对冒泡排序微小改动的基本思想和一份参考实现代码,并在说明了算法的性能后用随机数据进行了验证。 ◆ 思想 更少的比较可以节省一定的时间,此改动可以减少更小范围的比较。 (把水平陈列的数组逆时针旋转90°后,有助于理解后续的内容。) 将包含顶层以下的所有元素作为待排序范围,将该范围以上的所有 阅读全文
posted @ 2024-04-12 20:17 green-cnblogs 阅读(11) 评论(0) 推荐(0) 编辑
摘要:本文记述了冒泡排序的基本思想和一份参考实现代码,并在说明了算法的性能后用随机数据进行了验证。 ◆ 思想 (把水平陈列的数组逆时针旋转90°后,有助于理解后续的内容。) 将包含顶层以下的所有元素作为待排序范围,将该范围以上的所有元素作为已排序范围。通过一一比较相邻的两个元素,自底向上地将待排序范围内的 阅读全文
posted @ 2024-04-12 18:50 green-cnblogs 阅读(25) 评论(0) 推荐(0) 编辑
摘要:本文记述了针对插入排序微小改动的基本思想和一份参考实现代码,并在说明了算法的性能后用随机数据进行了验证。 ◆ 思想 内存中的数据交换是昂贵的操作,此改动实现了不需要交换的插入排序。 将第一个元素之后的所有元素作为待排序范围,将前面的所有元素作为已排序范围。通过一一比较,逐个将已排序范围内比第二个元素 阅读全文
posted @ 2024-04-08 11:12 green-cnblogs 阅读(9) 评论(0) 推荐(0) 编辑
摘要:本文记述了快速排序的基本思想和一份参考实现代码,并在说明了算法的性能后用随机数据进行了验证。 ◆ 思想 基于分治思想的快速排序,使用切分函数找到一个切分位置,保证其左侧子范围内的所有元素都不大于切分位置的元素,右侧子范围内的所有元素都不小于切分位置的元素。然后用递归调用分别对两个子范围排序。 算法的 阅读全文
posted @ 2024-06-02 21:30 green-cnblogs 阅读(42) 评论(0) 推荐(0) 编辑
摘要:本文记述了多向归并排序的基本思想并给出了一份参考实现代码。在说明了算法的性能后用随机数据进行了验证。 ◆ 思想 在归并排序、归并排序(二)、归并排序(三)、归并排序(四)中记述的归并排序,都是把待排序范围分成两个部分分别排序的。而多向归并排序是把待排序范围分为 K 个部分,把它们分别排序然后进行归并 阅读全文
posted @ 2024-05-25 09:14 green-cnblogs 阅读(8) 评论(0) 推荐(0) 编辑
摘要:本文记述了自然的两两归并排序并给出了一份参考实现代码。在说明了算法的性能后用随机数据进行了验证。 ◆ 思想 自然的归并排序是自底向上的。先从第一个元素开始找到一个有序的子范围,然后从紧接着的后面元素开始找到另一个有序的子范围,将这两个子范围归并成一个大的有序子范围。接着找到下一个有序子范围,将它与前 阅读全文
posted @ 2024-05-23 12:38 green-cnblogs 阅读(5) 评论(0) 推荐(0) 编辑
摘要:本文记述了针对归并排序的 3 项改进和一份参考实现代码,并在说明了算法的性能后用随机数据进行了验证。 ◆ 思想 本文实现了《算法(第4版)》书中提到的 2 项改进和练习题 2.2.10。 对小规模子数组使用插入排序。因为递归会使小规模问题中方法的调用过于频繁,所以改进对它们的处理方法就能改进整个算法 阅读全文
posted @ 2024-05-20 11:45 green-cnblogs 阅读(12) 评论(0) 推荐(0) 编辑
摘要:本文记述了针对归并排序的 3 项改进和一份参考实现代码,并在说明了算法的性能后用随机数据进行了验证。 ◆ 思想 本文实现了《算法(第4版)》书中提到的 3 项改进, 对小规模子数组使用插入排序。减少在小规模数组中的递归调用能改进整个算法。 测试数组是否已经有序。任意有序的子数组算法的运行时间变成线性 阅读全文
posted @ 2024-05-14 20:50 green-cnblogs 阅读(15) 评论(0) 推荐(0) 编辑
摘要:本文记述了自底向上归并排序的基本思想和一份参考实现代码,并在说明了算法的性能后用随机数据进行了验证。 ◆ 思想 使用自底向上的递推思想进行排序。从大小为 1 的子范围开始两两归并,得到小规模排序的结果。逐步将子范围的大小翻倍并继续两两归并,直到整个数组范围都已被归并,即得到整体排序的结果。归并两个已 阅读全文
posted @ 2024-05-07 15:06 green-cnblogs 阅读(15) 评论(0) 推荐(0) 编辑
摘要:本文记述了自顶向下归并排序的基本思想和一份参考实现代码,并在说明了算法的性能后用随机数据进行了验证。 ◆ 思想 使用自顶向下的分治思想进行排序。将待排序元素分为两个待排序子范围,用递归的方式对两个子范围分别排序。然后将排序结果归并起来,即得到整体排序的结果。归并两个已排序的子范围时,需要借助临时的存 阅读全文
posted @ 2024-04-22 14:36 green-cnblogs 阅读(30) 评论(0) 推荐(0) 编辑
摘要:本文记述了希尔排序采用另一个间隔序列的基本思想和参考实现,并在说明了算法的性能后用随机数据进行了验证。 ◆ 思想 在前一篇希尔排序文章中,用到了简单的间隔序列 1, 4, 13, 40, ... (h = 3*h + 1)。本文参考了《算法(第4版)》练习题 2.1.29,用到的间隔序列为 1, 5 阅读全文
posted @ 2024-04-17 15:15 green-cnblogs 阅读(34) 评论(0) 推荐(0) 编辑
摘要:本文汇总了笔者所写的所有“常见的排序算法”的实现,从性能特点和运行时间的角度加以了对比。 以下表格记录了笔者所写的所有“常见的排序算法”的性能特点。 算法类 时间复杂度 空间复杂度 是否稳定 备注 Selection N^2 1 否 选择排序 Insertion N^2 1 是 插入排序,标准版。 阅读全文
posted @ 2024-07-24 16:18 green-cnblogs 阅读(79) 评论(0) 推荐(0) 编辑
摘要:本文记述了堆排序算法改用多叉堆实现的基本思想和一份参考实现代码,并在说明了算法的性能后用随机数据进行了验证。 ◆ 思想 多叉堆的完全树中,位置为 k 的结点,其父结点的位置为 ⎣(k + (d-2)) / d⎦,其子结点的位置为 k*d - (d-2), k*d - (d-1), ..., k*d, 阅读全文
posted @ 2024-07-23 14:40 green-cnblogs 阅读(20) 评论(0) 推荐(0) 编辑
摘要:本文记述了堆排序改用前序表示法基本思想和一份参考实现代码,并在说明了算法的性能后用随机数据进行了验证。 ◆ 思想 堆排序算法按照层次操作堆中的元素,即物理位置 k 的结点与位置 2k 或 2k+1 的结点交换。然而用前序表示的堆,其父子结点的位置关系不能简单地计算出来。因此,当算法模型(逻辑上)用的 阅读全文
posted @ 2024-07-22 16:15 green-cnblogs 阅读(28) 评论(0) 推荐(0) 编辑
摘要:本文记述了针对堆排序同时实施减少数据交换和 Floyd 方法的一份参考实现代码,并在说明了算法的性能后用随机数据进行了验证。 ◆ 思想 减少数据交换的操作,请参考堆排序(二);Floyd 方法,请参考堆排序(三)(此处略去详细说明)。 ◆ 实现 排序代码采用《算法(第4版)》的“排序算法类模板”实现 阅读全文
posted @ 2024-07-21 14:39 green-cnblogs 阅读(10) 评论(0) 推荐(0) 编辑
摘要:本文记述了针对堆排序实施 Floyd 方法的基本思想和一份参考实现代码,并在说明了算法的性能后用随机数据进行了验证。 ◆ 思想 “大多数在下沉排序期间重新插入堆的元素会被直接加入到堆底。Floyd 在 1964 年观察发现,我们正好可以通过免去检查元素是否到达正确位置来节省时间。”(引《算法(第4版 阅读全文
posted @ 2024-07-21 10:52 green-cnblogs 阅读(34) 评论(0) 推荐(0) 编辑
摘要:本文记述了针对堆排序微小改动的基本思想和一份参考实现代码,并在说明了算法的性能后用随机数据进行了验证。 ◆ 思想 堆的下沉操作中用到了昂贵的数据交换操作,此改动参考无交换的插入排序的思想,实现了减少数据交换的下沉操作。 先将要下沉的元素存放在临时空间中,再将下降过程中遇到的所有元素逐层上移,待找到下 阅读全文
posted @ 2024-07-20 11:04 green-cnblogs 阅读(13) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示