C:qsort功能的时间复杂度是多少?

时间:2016-08-25 23:02:20

标签: c sorting

C中标准库的qsort函数的复杂性是多少? 如果可能,请提供参考。

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

1 个答案:

答案 0 :(得分:7)

根据cppreference.com,这是关于C语言文档的一个相当可靠的来源:

  

尽管名称不同,但C和POSIX标准都不要求使用quicksort实现此功能,也不需要做出任何复杂性或稳定性保证。

我有一份C ISO标准草案,其中说明了以下qsort

  

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

     

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

     

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

     

返回:

     

qsort函数不返回任何值。

这支持参考网站所说的内容,因为这里没有提到任何复杂性保证。

总的来说,你不能假设运行时平均为O(n log n)或最坏情况。有一些实现的历史使用启发式算法,在最坏的情况下会退化;搜索“Quicksort的杀手对手”了解详情。

在最坏的情况下,将此与C ++ std::sortwhich is guaranteed to run in time O(n log n)进行对比。