合集-常见的排序算法
摘要:本文记述了堆排序的基本思想和一份参考实现代码,并在说明了算法的性能后用随机数据进行了验证。 ◆ 思想 J.W.J Williams 提出了堆排序的算法,该算法利用了二叉堆有序的性质,将排序的过程分为先构建堆再排序的两个阶段。 先构建堆。从当前待排序范围一半的位置开始向第一个位置扫描,用下沉操作处理每
阅读全文
摘要:本文记述了堆的基本概念、表示法和操作。 ◆ 概念 堆是一种存放多个元素的数据结构,它要求每个元素都要大于等于或小于等于另外若干特定位置的元素。堆常用完全 d 叉树(以下简称“完全树”)表示,堆中的元素与树上的结点一一对应,这样的完全树是堆有序的,也被称为 d 叉堆。当完全树的每个结点都大于等于它的所
阅读全文
摘要:本文记述了非递归快速排序的基本思想和一份参考实现代码,并在说明了算法的性能后用随机数据进行了验证。 ◆ 思想 非递归的快速排序,使用一个栈保存待排序子范围的范围边界。在循环中弹出栈顶的范围边界。使用切分函数找到此范围中一个切分位置,保证其左侧子范围内的所有元素都不大于切分位置的元素,右侧子范围内的所
阅读全文
摘要:本文记述了 J.Bently 和 D.Mcllroy 的快速三向切分快速排序的基本思想和一份参考实现代码,并在说明了算法的性能后用随机数据进行了验证。 ◆ 思想 对比快速排序、快速排序(二)和快速排序(三)可以发现,对于随机数据而言,E.W.Dijkstra 的三向切分快速排序的性能要慢于标准快速排
阅读全文
摘要:本文记述了 E.W.Dijkstra 的三向切分快速排序的基本思想和一份参考实现代码,并在说明了算法的性能后用随机数据进行了验证。 ◆ 思想 “在有大量重复元素的情况下,快速排序的递归性会使元素全部重复的子数组经常出现。这就有很大的改进潜力,将当前实现的线性对数级的性能提高到线性级别。”(引《算法(
阅读全文
摘要:本文记述了对快速排序的 2 项改进的基本思想和一份参考实现代码,并在说明了算法的性能后用随机数据进行了验证。 ◆ 思想 本文实现了《算法(第4版)》书中提到的 2 项改进, 切换到插入排序:对小规模子数组使用插入排序。减少在小规模数组中的递归调用能改进整个算法。 三取样切分:将取样大小设为 3 并用
阅读全文