我机器的 C 库提供qsort
,heapsort
和mergesort
, 在手册页中说:
qsort()
和qsort_r()
函数是 CAR Hoare 的“快速排序”算法的一种实现,它是分区交换排序的一种变体;特别是,请参阅 DE Knuth 的算法Q。快速排序平均需要O(n lg n)时间。此实现使用中值选择来避免其O(n 2 )最坏情况行为。
该heapsort()
函数是 JWJ William 的“堆排序”算法的一个实现,是选择排序的一种变体;特别是,请参阅 DE Knuth 的算法H。堆排序需要O(n lg n)最坏情况时间。它唯一的优势qsort()
是它几乎不使用额外的内存。whileqsort()
不分配内存,它是使用递归实现的。
该函数mergesort()
需要额外的 sizenel * width
个字节的内存;只有在空间不是很宝贵的情况下才应该使用它。该mergesort()
功能针对已有订单的数据进行了优化;它的最坏情况时间是O(n lg n);最好的情况是O(n)。
通常,qsort()
快于mergesort()
哪个 快于heapsort()
。数据中的内存可用性和预先存在的顺序可能会使这不真实。
如果您想查看实现的具体细节,可以查看大量开源 C 库。
至于“为什么系统 X 选择算法 Y”,这是一个很难有意义地回答的问题——如果你没有足够幸运在文档中找到理由,你必须直接询问设计者。