【发布时间】:2012-11-01 11:28:38
【问题描述】:
我找不到任何关于 C qsort 函数使用什么排序算法的信息。
是快速排序吗? man中没有提到。
【问题讨论】:
我找不到任何关于 C qsort 函数使用什么排序算法的信息。
是快速排序吗? man中没有提到。
【问题讨论】:
未指定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函数不返回任何值。
【讨论】:
作为对 James McNellis 对标准的引用的补充,值得注意的是 GNU’s libc documentation 这么说
qsort函数的名称来源于它最初是使用“快速排序”算法实现的。
它决定使用alternative algorithm,显然是合并排序。
【讨论】: