PHP排序算法系列之归并排序详解
发布:smiling 来源: PHP粉丝网 添加日期:2021-08-27 10:12:53 浏览: 评论:0
这篇文章主要为大家详细介绍了PHP排序算法系列之归并排序的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
归并排序
归并排序(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);
- }
Tags: PHP排序算法 PHP归并排序
- 上一篇:PHP排序算法系列之桶排序详解
- 下一篇:PHP排序算法系列之直接选择排序详解
相关文章
- ·PHP中实现冒泡排序和快速排序算法示例(2015-04-04)
- ·PHP 冒泡/快速/选择/插入排序算法实例讲解(2015-12-24)
- ·php四种基础排序算法的运行时间比较(2016-08-25)
- ·php实现的常见排序算法汇总(2021-04-11)
- ·PHP简单选择排序算法实例(2021-05-09)
- ·PHP四种基本排序算法示例(2021-05-22)
- ·PHP版本常用的排序算法汇总(2021-06-30)
- ·PHP排序算法系列之桶排序详解(2021-08-26)
- ·PHP排序算法系列之直接选择排序详解(2021-08-27)
- ·PHP排序算法系列之插入排序详解(2021-08-27)
- ·PHP排序算法之冒泡排序(Bubble Sort)实现方法详解(2021-09-11)
- ·PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析(2021-09-11)
- ·PHP排序算法之基数排序(Radix Sort)实例详解(2021-09-11)
- ·PHP排序算法之快速排序(Quick Sort)及其优化算法详解(2021-09-11)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)