主页 > 知识库 > PHP排序算法系列之归并排序详解

PHP排序算法系列之归并排序详解

热门标签:南宁高频外呼回拨系统哪家好 江苏外呼电销机器人报价 长沙crm外呼系统业务 400电话办理福州市 深圳外呼系统收费 400电话申请方法收费 电话机器人危险吗 专业电话机器人批发商 离石地图标注

归并排序

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。

归并过程

归并排序的核心就是如何将两个有序序列进行合并,假定有两个有序数组,比较两个有序数组的首个元素,谁小就取谁,并将该元素放入第三个数组中,取了之后在相应的数组中将删除此元素,依次类推,当取到一个数组已经没有元素时,就可将另一数组的剩余元素直接添加到第三个数组中。

原理

1、将序列每相邻两个数字进行归并操作,形成ceil(n/2)个序列,排序后每个序列包含两个元素,最后一个序列可能只有一个元素。

2、将上述序列再次归并,形成ceil(n/4)个序列,每个序列包含四个元素,最后一个序列可能只有三个及以下元素。

3、重复步骤2,直到所有元素排序完毕。

举例

对数组[53,89,12,6,98,25,37,92,5]进行排序

第一次归并后

(53,89),12,(6,98),(25,37),(5,92)

第二次归并后

(12,53,89),(6,25,37,98),(5,92)

第三次归并后

(6,12,25,37,53,89,98),(5,92)

第四次归并后

5,6,12,25,37,53,89,92,98

PHP代码实现

?php
function merge_sort($arr){
  $length=count($arr);
  if($length=1){
    return $arr;
  }
  //分解数组,递归排序
  $half=ceil($length/2);
  $arr2=array_chunk($arr,$half);
  $left=merge_sort($arr2[0]);
  $right=merge_sort($arr2[1]);
  while(count($left)count($right)){
    if($left[0]$right[0]){
      $reg[]=array_shift($left);
    }else{
      $reg[]=array_shift($right);
    }
  }
  return array_merge($reg,$left,$right);
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
  • php 归并排序 数组交集
  • 详解PHP归并排序的实现
  • PHP排序算法之快速排序(Quick Sort)及其优化算法详解
  • PHP排序算法之基数排序(Radix Sort)实例详解
  • PHP排序算法之堆排序(Heap Sort)实例详解
  • PHP排序算法之希尔排序(Shell Sort)实例分析
  • PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
  • PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
  • PHP排序算法之冒泡排序(Bubble Sort)实现方法详解
  • PHP排序算法之归并排序(Merging Sort)实例详解

标签:太原 株洲 南京 曲靖 滨州 兴安盟 南昌 白酒营销

巨人网络通讯声明:本文标题《PHP排序算法系列之归并排序详解》,本文关键词  PHP,排序,算法,系列,之,归并,;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 下面列出与本文章《PHP排序算法系列之归并排序详解》相关的同类信息!
  • 本页收集关于PHP排序算法系列之归并排序详解的相关信息资讯供网民参考!
  • 推荐文章