总结再回想一下, 最开始的问题, 当数组长度小于4的时候, 顺序没有改变, 这个因为使用了稳定的插入排序. 当数组长度100的时候, 使用了不稳定的快速排序.
之后使用usort函数, 就把他当做不稳定的就可以了. 这样基本不会有问题的. 但是, 讲话了, 如果我就是需要一个稳定的排序算法怎么办?
来来来, 官方函数推荐给你https://www.php.net/manual/zh/function.uasort.php
If you want to keep the order when two members compare as equal, use this.<?phpfunction stable_uasort(&$array, $cmp_function) {if(count($array) < 2) {return;}$halfway = count($array) / 2;$array1 = array_slice($array, 0, $halfway, TRUE);$array2 = array_slice($array, $halfway, NULL, TRUE);stable_uasort($array1, $cmp_function);stable_uasort($array2, $cmp_function);if(call_user_func($cmp_function, end($array1), reset($array2)) < 1) {$array = $array1 + $array2;return;}$array = array();reset($array1);reset($array2);while(current($array1) && current($array2)) {if(call_user_func($cmp_function, current($array1), current($array2)) < 1) {$array[key($array1)] = current($array1);next($array1);} else {$array[key($array2)] = current($array2);next($array2);}}while(current($array1)) {$array[key($array1)] = current($array1);next($array1);}while(current($array2)) {$array[key($array2)] = current($array2);next($array2);}return;}
简单看了一下, 就是一个标准的归并排序.
这次是我的失误, 当初其实想到了排序的稳定性问题, 然后写了个demo验证了一下(就是长度为4的数组), 然后自认为是稳定的, 其实随便到网上搜一下, 都能搜到的问题的. 引以为鉴.
推荐阅读
- Java 如何利用钩子函数实现优雅停服?刨根问底
- PHP中的traits使用详解
- 八个常用函数,看看哪个还不会?
- PHP使用反向Ajax技术实现在线客服系统
- method 学编程傻傻分不清什么是方法和函数(function)?
- Python4大函数式编程函数,每一个都是经典!
- PHP的抽象类的使用
- 你会做 Excel目录 吗?它简直是一部Excel函数百科全书
- PHP7.X安装及配置教程
- PHPStorm codeSniffer 检测代码