• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

php 搞代码 4年前 (2022-01-22) 19次浏览 已收录 0个评论

php排序算法有很多种,本文主要为大家详细介绍了PHP排序算法系列之归并排序的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助到大家。

归并排序

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

归并过程

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

原理

1、将序列每相邻两个数字进行归并操作,形成ceil(n/2)个序列,排序后每个序列包含两个元素,最后一个序列可能只(本文来源gaodai#ma#com搞@@代~&码网

搞代gaodaima码

有一个元素。

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代码实现

<?phpfunction 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常见排序算法学习

JavaScript基本常用排序算法的实例解析

以上就是PHP排序算法之归并排序详解的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP排序算法之归并排序详解

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址