强制C库qsort执行快速排序而不是mergesort

时间:2015-11-28 19:42:22

标签: c qsort

我对C很新,我正在读这篇文章: Killing Quicksort

它说:

  

对于那些在家里玩的人,请注意:如果C库认为计算机有足够的可用内存,则GNU C库qsort函数实际上是mergesort;强制快速排序,调用未声明的_quicksort函数并使用gcc -static进行编译。

关于compiller选项,我使用CMake并将cmake标志设置为:

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 -static")

但我不知道如何调用未声明的 _quicksort

有没有人有这方面的经验?

修正:

我刚刚以这种方式声明了像@recycler建议的_quicksort函数:

void _quicksort(void *__base, size_t __nmemb, size_t __size,
        __compar_fn_t __compar);

现在似乎表现得像一个快速排序。 我是C的初学者,对我而言,这似乎很神奇,但无论如何,我认为自己现在很满意。

1 个答案:

答案 0 :(得分:2)

你可以声明函数" _quicksort"在你的c测试代码中。这应该与qsort相同。 现在你必须将它与c-lib链接,这应该由链接器自动完成。 如果导出函数_quicksort,则可以使用它,链接器会将其链接到二进制文件。 如果未导出,则会出错。

这是快速而肮脏的选择。 您还可以阅读GNU C lib的源代码。也许还有另一种选择。