我想按修改时间的升序和降序对文件进行排序。
根据这个answer看起来最好定义一个排序回调函数并使用usort / uasort。
然而,由于我的应用程序的性质,我可能遇到一些排序算法的最坏情况(例如几乎反向排序的输入序列)。
由于每次比较都使用两个部分在网络驱动器上的文件系统访问,因此比较次数至关重要,必须最小化。其他类型的迭代可以更多。
那么PHP的数组排序函数使用哪种算法?快速排序? Multisort?有什么办法可以配置吗?
我可能在排序之前将数组洗牌吗?
或者我是否需要编写自己的实现?
您是否了解一些使用可配置算法提供排序功能的好库?
您建议使用哪种算法来解决最小化比较的问题?
答案 0 :(得分:15)
在php.net/sort
我发现了这个:
注意:与大多数PHP排序函数一样,sort()使用»Quicksort。
的实现
我相信它使用randomized quicksort,所以不需要改组数组。
我做了some tests并且PHP的快速排序没有随机化,所以洗牌输入数组!!
答案 1 :(得分:6)
我使用PHP OpenGrok进行了一些搜索,只是基于对函数名称和浏览代码的一些看法,看起来像是使用快速排序实现的。
要最小化文件系统调用,请为阵列中的每个项目创建一次,并将结果存储在另一个阵列中。在比较器函数中使用第二个数组,而不是再次进行调用。