美文网首页编什么程PHP实战
php实现归并排序算法

php实现归并排序算法

作者: 沙蒿同学 | 来源:发表于2018-12-02 10:04 被阅读6次

理解

归并操作(merge),也叫归并算法,指的是将两个顺序序列合并成一个顺序序列的方法。
如 设有数列{6,202,100,301,38,8,1}
初始状态:6,202,100,301,38,8,1
第一次归并后:{6,202},{100,301},{8,38},{1},比较次数:3;
第二次归并后:{6,100,202,301},{1,8,38},比较次数:4;
第三次归并后:{1,6,8,38,100,202,301},比较次数:4;
总的比较次数为:3+4+4=11;
逆序数为14;
归并排序是稳定的排序,速度仅次于快速排序

代码实现

<?php
/**
 * Created by PhpStorm.
 * User: benny
 * Date: 18-12-2
 * Time: 上午9:42
 */
/**
 * 归并排序
 * @param array $array
 * @return array
 *
 */
function all_merge_sort($array=[]){
    $count = count($array);
    //递归结束条件,到达这步的时候,数组就只剩下一个元素了,也就是分离了数组
    if ($count<=1){
        return $array;
    }
    $mid = intval($count/2);

    //拆分数组0-mid这部分给左边left_array
    $left_array = array_slice($array,0,$mid);

    //拆分数组mid-末尾这部分给右边right_array
    $right_array = array_slice($array,$mid);

    //左边拆分完后开始递归合并往上走
    $left_array = all_merge_sort($left_array);

    //右边拆分完毕开始递归往上走
    $right_array = all_merge_sort($right_array);

    //合并两个数组,继续递归
    $return_array = merge_sort($left_array,$right_array);
    return $return_array;
}

/**
 * @param $left_array
 * @param $right_array
 * @return array
 *
 * merge函数将指定的两个有序数组(arr1,arr2)合并并且排序
我们可以找到第三个数组,然后依次从两个数组的开始取数据哪个数据小就先取哪个的,然后删除掉刚刚取过///的数据
 */
function merge_sort($left_array,$right_array){
    $return_array = [];
    while (count($left_array) && count($right_array)){
        //这里不断的判断哪个值小,就将小的值给到arrC,但是到最后肯定要剩下几个值,
        //不是剩下arrA里面的就是剩下arrB里面的而且这几个有序的值,肯定比arrC里面所有的值都大所以使用
        $return_array[] = $left_array[0] < $right_array[0] ? array_shift($left_array): array_shift($right_array);
    }
    return array_merge($return_array,$left_array,$right_array);
}

$array=[12,5,4,32,56,87,4,11,2,0];
print_r(json_encode(all_merge_sort($array)));

相关文章

  • 2018-06-30

    排序算法之归并排序 归并排序算法是排序算法中的经典算法之一,其核心思想是利用归并的思想实现的排序方法,该算法采用经...

  • 排序算法之归并排序

    归并排序(Merge Sort) 归并排序是利用归并的思想实现排序的方式,该算法采用的是经典的分治算法 归并排序过...

  • 第三章:高级排序算法

    归并排序算法(mergeSort) 算法思想:Python使用函数实现: 自底向上的归并排序算法 算法思想:Pyt...

  • 归并排序

    图解排序算法(四)之归并排序 基本思想 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用...

  • 归并排序&快速排序

    归并排序 利用归并的思想实现排序方法,该算法采用经典的分治策略,分而治之。 代码实现 基础设置 归并排序 —— 非...

  • 排序算法详细代码实现

    算法分类 算法时间复杂度 选择排序 插入排序 C++实现 Python实现 冒泡排序 Python实现 归并排序 ...

  • Java版归并排序算法实现

    merge函数的实现 递归方式实现(自顶向下)的归并排序算法 借用栈实现循环方式(自顶向下)的归并排序算法 不借用...

  • iOS算法总结-归并排序

    归并排序算法: 归并排序(Merging Sort) 就是利用归并的思想实现的排序方法。它的原理是假设初始序列含有...

  • 数据结构与算法 08: 归并排序

    归并排序算法: 归并排序(Merging Sort) 就是利用归并的思想实现的排序方法。它的原理是假设初始序列含有...

  • 归并排序算法实现

    排序算法是最常见,最基础的算法,作者文集中记录了两种排序算法(插入排序,归并排序) 归并排序实现原理是切刀流,先中...

网友评论

    本文标题:php实现归并排序算法

    本文链接:https://www.haomeiwen.com/subject/kxxjcqtx.html