歸并排序(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管理模式
- 資訊
- 行業資訊
- 公眾號列表
- 博客
- 綜合門戶、社區
- 技術資源
- 開源資源
- 手冊、文檔、教程
- 在線課堂
- 代碼托管
- 云服務商