qsort 使用啥排序算法?

Posted

技术标签:

【中文标题】qsort 使用啥排序算法?【英文标题】:What sorting algorithm does qsort use?qsort 使用什么排序算法? 【发布时间】:2012-11-01 11:28:38 【问题描述】:

我找不到任何关于 C qsort 函数使用什么排序算法的信息。

是快速排序吗? man中没有提到。

【问题讨论】:

【参考方案1】:

未指定qsort 的实现:实现可以使用任何排序算法。有趣的是,排序不需要稳定,也没有复杂度要求。

qsort(C11 §7.22.5.2)的整个规范如下:

qsort 函数

概要

#include <stdlib.h>
void qsort(void *base, size_t nmemb, size_t size,
     int (*compar)(const void *, const void *));

说明

qsort 函数对nmemb 对象数组进行排序,其初始元素为 由base 指向。每个对象的大小由size指定。

数组的内容根据compar指向的比较函数升序排序,该函数使用两个指向被比较对象的参数调用。如果认为第一个参数分别小于、等于或大于第二个参数,则该函数应返回一个小于、等于或大于零的整数。

如果两个元素比较相等,则它们在结果排序数组中的顺序是未指定的。

退货

qsort 函数不返回任何值。

【讨论】:

【参考方案2】:

理论上,qsort只定义到qsortbsort的返回值和调用值的地步。 Here 是 ISO 标准参考。

在实践中,它通常使用quicksort。

【讨论】:

【参考方案3】:

作为对 James McNellis 对标准的引用的补充,值得注意的是 GNU’s libc documentation 这么说

qsort 函数的名称来源于它最初是使用“快速排序”算法实现的。

它决定使用alternative algorithm,显然是合并排序。

【讨论】:

以上是关于qsort 使用啥排序算法?的主要内容,如果未能解决你的问题,请参考以下文章

一些数组排序算法的简单实现(冒泡插入希尔归并和qsort)

回调函数和如何使用qsort函数以及最后如何运用冒泡排序完成一个各类型数据都适用的排序算法

各种排序算法分析总结(待整理))

C++中sort()及qsort() (不完整介绍)

算法设计与分析——快速排序

快速排序算法