PHP的usort适用哪种排序算法?

时间:2011-02-05 15:26:55

标签: php algorithm sorting

我想按修改时间的升序和降序对文件进行排序。

根据这个answer看起来最好定义一个排序回调函数并使用usort / uasort。

然而,由于我的应用程序的性质,我可能遇到一些排序算法的最坏情况(例如几乎反向排序的输入序列)。

由于每次比较都使用两个部分在网络驱动器上的文件系统访问,因此比较次数至关重要,必须最小化。其他类型的迭代可以更多。

那么PHP的数组排序函数使用哪种算法?快速排序? Multisort?有什么办法可以配置吗?

我可能在排序之前将数组洗牌吗?

或者我是否需要编写自己的实现?

您是否了解一些使用可配置算法提供排序功能的好库?

您建议使用哪种算法来解决最小化比较的问题?

2 个答案:

答案 0 :(得分:15)

php.net/sort我发现了这个:

  

注意:与大多数PHP排序函数一样,sort()使用»Quicksort。

的实现

我相信它使用randomized quicksort,所以不需要改组数组。

我做了some tests并且PHP的快速排序没有随机化,所以洗牌输入数组!!

答案 1 :(得分:6)

我使用PHP OpenGrok进行了一些搜索,只是基于对函数名称和浏览代码的一些看法,看起来像是使用快速排序实现的。

要最小化文件系统调用,请为阵列中的每个项目创建一次,并将结果存储在另一个阵列中。在比较器函数中使用第二个数组,而不是再次进行调用。