qsort使用什么排序算法?

时间:2012-11-13 00:28:14

标签: c sorting

我无法找到有关排序算法C qsort函数使用的任何信息。

快速排序吗?人类没有提到它。

3 个答案:

答案 0 :(得分:16)

未指定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函数不返回任何值。

答案 1 :(得分:2)

理论上,qsort仅定义为qsortbsort的返回值和调用值。 Here是ISO标准参考。

实际上,它通常使用quicksort

答案 2 :(得分:1)

作为James McNellis对该标准的引用的补充,值得注意的是GNU’s libc documentation表示

  

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

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