归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
```
//merge函数将指定的两个有序数组(arr1,arr2)合并并且排序
//我们可以找到第三个数组,然后依次从两个数组的开始取数据哪个数据小就先取哪个的,然后删除掉刚刚取过///的数据
function al_merge($arrA,$arrB)
{
$arrC = array();
while(count($arrA) && count($arrB)){
//这里不断的判断哪个值小,就将小的值给到arrC,但是到最后肯定要剩下几个值,
//不是剩下arrA里面的就是剩下arrB里面的而且这几个有序的值,肯定比arrC里面所有的值都大所以使用
$arrC[] = $arrA['0'] < $arrB['0'] ? array_shift($arrA) : array_shift($arrB);
}
return array_merge($arrC, $arrA, $arrB);
}
//归并排序主程序
function al_merge_sort($arr){
$len = count($arr);
if($len <= 1)
return $arr;//递归结束条件,到达这步的时候,数组就只剩下一个元素了,也就是分离了数组
$mid = intval($len/2);//取数组中间
$left_arr = array_slice($arr, 0, $mid);//拆分数组0-mid这部分给左边left_arr
$right_arr = array_slice($arr, $mid);//拆分数组mid-末尾这部分给右边right_arr
$left_arr = al_merge_sort($left_arr);//左边拆分完后开始递归合并往上走
$right_arr = al_merge_sort($right_arr);//右边拆分完毕开始递归往上走
$arr = al_merge($left_arr, $right_arr);//合并两个数组,继续递归
return $arr;
}
$arr = array(12, 5, 4, 7, 8, 3, 4, 2, 6, 4, 9);
print_r(al_merge_sort($arr));
```
- 概述说明
- 数据结构
- 数组
- 栈
- 队列
- 链表
- 树
- 堆
- 图
- 常用算法
- 排序算法
- 选择排序
- 冒泡排序
- 插入排序
- 快速排序
- 归并排序
- 希尔排序
- 堆排序
- 计数排序
- 基数排序
- 二分查找
- 贪心算法
- 回溯算法
- 剪枝算法
- 分支限界法
- 动态规划
- 设计模式
- 工厂模式
- 抽象工厂模式
- 单例模式
- 建造者模式
- 原型模式
- 适配器模式
- 桥接模式
- 过滤器模式
- 组合模式
- 装饰器模式
- 外观模式
- 享元模式
- 代理模式
- 责任链模式
- 命令模式
- 解释器模式
- 迭代器模式
- 中介者模式
- 备忘录模式
- 观察者模式
- 状态模式
- 空对象模式
- 策略模式
- 模板模式
- 访问者模式
- 并发
- 多线程
- 线程安全
- 一致性、事务
- 锁
- 操作系统
- 计算机原理
- CPU
- 进程
- 线程
- 协程
- Linux
- 运维
- 常规监控
- 统计分析
- 自动化运维
- 测试
- 文档管理
- 日志管理
- 中间件
- Web Server
- Nginx
- Apache
- Tomcat
- 缓存
- 消息队列
- 网络协议
- 协议
- OSI 七层协议
- TCP/IP
- HTTP
- HTTP2.0
- HTTPS
- 网络模型
- Epoll
- kqueue
- 数据库
- 基础理论
- MySQL
- NoSQL
- 搜索引擎
- Elasticsearch
- sphinx
- Lucene
- 性能
- 性能优化方法论
- 容量评估
- CDN 网络
- 连接池
- 性能调优
- 安全
- web 安全
- XSS
- CSRF
- SQL 注入
- 脚本注入
- 漏洞扫描工具
- 验证码
- DDoS 防范
- 用户隐私信息保护
- 加密解密
- 对称加密
- 哈希算法
- 非对称加密
- 服务器安全
- 数据安全
- 网络隔离
- 授权、认证
- RBAC
- OAuth2.0
- 单点登录(SSO)
- JWT
- 开源框架
- 开源协议
- 日志框架
- ORM
- PHP开源框架
- 分布式集群
- 扩展性设计
- 稳定性高可用
- 数据库扩展
- 分布式一致
- 分布式文件系统
- 开发模式
- DDD(Domain-driven Design - 领域驱动设计)
- Actor 模式
- 响应式编程
- DODAF2.0
- Serverless
- Service Mesh
- 项目管理
- 架构评审
- 重构
- 代码规范
- 代码 Review
- 看板管理
- 敏捷开发
- 极限编程
- PDCA 循环质量管理
- FMEA管理模式
- 资讯
- 行业资讯
- 公众号列表
- 博客
- 综合门户、社区
- 技术资源
- 开源资源
- 手册、文档、教程
- 在线课堂
- 代码托管
- 云服务商