<?php
/** * 歸併排序
*/function guisort( $arr )
//如果成員很多, 那麼對左邊 歸併, 對右邊歸併
$mid = floor( $count / 2 );
$left = guisort( array_slice( $arr, 0, $mid ) );
$right = guisort( array_slice( $arr, $mid ) );
// 左半數組的大小, 右半陣列的大小
$leftlen = count( $left );
$rightlen = count( $right );
//返回值儲存的變數
$ret = array();
$li = 0;
$ri = 0;
while( 1 )
// 如果右邊全合併了, 則退出迴圈
if( $ri >= $rightlen )
//如果左邊的數小, 則左邊加入返回陣列
if( $left[ $li ] <= $right[ $ri ] )
else
}if( $flag == 'left' )
elseif( $flag == 'right' )
return $ret;
}// 測試**
$arr = range( 1, 100 );
shuffle( $arr );
var_dump( $arr );
$res = guisort( $arr );
var_dump( $res );
PHP 歸併排序
1 原理 歸併排序是一種概念上最簡單的排序演算法,與快速排序一樣,歸併排序也是基於分治法的。歸併排序將待排序的元素序列分成兩個長度相等的子串行,為每乙個子串行排序,然後再將他們合併成乙個子串行。合併兩個子串行的過程也就是兩路歸併。2 複雜度 歸併排序是一種穩定的排序演算法,歸併排序的主要問題在於它需...
php實現歸併排序
歸併排序是建立在歸併操作上的一種有效的排序演算法,該演算法是分治法的乙個典型應用。將已有序的子串行合併,得到完全有序的序列,即先使每個子串行有序,在使子串行段間有序。若將兩個有序表合併為乙個有序表,稱為二路歸併。如圖,從下往上,每一步都需將兩個已經有序的子串行合併成乙個大的有序陣列 合併兩個有序陣列...
排序演算法之 歸併排序 php
歸併排序 merge sort 是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。和選擇排序一樣,歸併排序的效能不受輸入資料的影響,但表現比選擇排序好的多,因為始終都是 o nlogn 的時間複雜度。代價是需要額外的記憶體空間...