引出
最近在一个项目中, 需要对一个数组的顺序进行调整, 允许手动将某一个元素提到数组的开头位置....在这里, 使用了PHP中的usort函数进行了数组的排序, 代码大致如下:
usort($arr, function ($a, $b){
// 这里添加了 order 字段, 默认为0, 将order...但是, 我记得我之前也测试过, 数组顺序没有变化啊, 我尝试将数组的长度缩小为4, 突然发现, 是我错了.
分析
既然确定了usort函数是不稳定的排序, 那么他到底是如何进行排序的呢?...不过, 虽然代码没看懂, 但是, 排序选择的算法我知道了
若数组长度小于等于16, 使用 插入排序
若数据长度大于16, 使用 快速排序 (快速排序对元素个数1024前后做了不同的处理, 应该是优化)...最后, 当我google找了一下, 发现第一条搜索就告诉了我, PHP的排序对不同长度分别使用了不同的排序算法. 这就尴尬了. 么事, 虽然最后对算法也没完全看懂, 但乐在其中