定义 : 是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。
    5归并排序.gif
    示例代码 :

    1. <?php
    2. // 主程序
    3. function merge_sort($arr){
    4. $len=count($arr);
    5. if($len<=1){
    6. return $arr;
    7. }
    8. $mid=intval($len/2); // 中间索引 按照中间索引 将数组半劈
    9. $left=array_slice($arr,0,$mid); // 前半段
    10. $right=array_slice($arr,$mid); // 后半段,第三个参数不写,代表取到结尾
    11. $left=merge_sort($left); // 递归拆左
    12. $right=merge_sort($right); // 递归拆右
    13. // 合并并排序
    14. return merge($left,$right);
    15. }
    16. // 合并排序辅助函数
    17. function merge($arr1,$arr2){
    18. $arr3=[];
    19. while (count($arr1) and count($arr2)){
    20. // array_shift删除数组的第一个元素 并将其返回
    21. $arr3[]=$arr1[0]<$arr2[0]?array_shift($arr1):array_shift($arr2);
    22. }
    23. return array_merge($arr3,$arr1,$arr2);// $arr1或者$arr2可能会剩下一个最大值 将其放至末尾
    24. }
    25. $arr=[4,1,6,5,7,9,3,2];
    26. echo "<pre>";
    27. print_r(merge_sort($arr));
    28. echo "</pre>";