php实现归并排序算法
归并排序算法的复杂度是O(nlogn)。
代码如下,完整代码在github上面,只需要clone下来执行composer install
然后执行 php artisan test:mergeSort
就可以看到结果了
1 | /** |
归并排序原理
归并排序和快排刚好相反,是先将整个数组左右打散,然后在逐一合并进行排序,最终完成整个数组的排序,排序示意图如下:
首先将整个数组左右打散,变成单个元素,因为单个元素可以被认为是有序的。
对应代码
1 | if (($hi - $lo) < 2) return [$a[$lo]]; |
接下来对左右两个有序数组进行排序,假设有一个数组$a分成了两个数组[3,4] [2,8],逐一比较,3and2,取出来2然后3and8取出来3然后4and8取出来4,最后取出来8,对应代码:
1 | $lb = $mi - $lo; //$b数组的边界 |
示意图如下: