看指標型的歸併演算法好麻煩,自己動手寫乙個,供自己學習用。
<?php
/*** php 歸併排序演算法示例。這是無指標型的,**容易看懂。
* 實際生產應用中,用指標速度更快。
* * 輸出如下:
* *
start : 0 end: 1 臨時陣列:array ( 0 => 30, 1 => 66, )
start : 2 end: 3 臨時陣列:array ( 0 => 6, 1 => 45, )
start : 0 end: 3 臨時陣列:array ( 0 => 6, 1 => 30, 2 => 45, 3 => 66, )
最終結果:array ( 0 => 6, 1 => 30, 2 => 45, 3 => 66, )
* *
* @author xieye
*/$arr = [30, 66, 45,6,]; // 原始陣列
$sort_arr = merge_sort( $arr ); // 排序
echo "最終結果:".var_export( $sort_arr, 1 ) ; //列印結果
// 歸併演算法總函式
function merge_sort ( array $arr )
// 遞迴分治,歸併,此演算法本身的思想是非常巧妙的。
function msort ( array $arr, $start, $end )
end: "." 臨時陣列:". var_export( $temparr, 1 )."
";foreach ($temparr as $v)
}return $arr;
}// 單獨的歸併演算法,不含分治。
// 前提是 start到mid部分是有序的,mid到end部分是有序的。所以合併的結果也是有序的。
// 歸併演算法的唯一缺點是,需要一塊跟原陣列一樣大的記憶體空間。
function merge ( array $arr, $start, $mid, $end )
else
} elseif (! $arr_left) else
}return $temparr;
}
PHP 實現歸併排序演算法
下列 來自 五分鐘學演算法,演示了歸併演算法的原理和步驟。原理 利用遞迴,先拆分 後合併 再排序。步驟 歸併排序主程式 function mergesort arr 遞迴結束條件,到達這步的時候,陣列就只剩下乙個元素了,也就是分離了陣列 mid intval len 2 取陣列中間 left arr...
PHP 實現歸併排序演算法
下列 來自 五分鐘學演算法,演示了歸併演算法的原理和步驟。原理 利用遞迴,先拆分 後合併 再排序。步驟 歸併排序主程式 function mergesort arr 遞迴結束條件,到達這步的時候,陣列就只剩下乙個元素了,也就是分離了陣列 mid intval len 2 取陣列中間 left arr...
排序演算法之 歸併排序 php
歸併排序 merge sort 是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。和選擇排序一樣,歸併排序的效能不受輸入資料的影響,但表現比選擇排序好的多,因為始終都是 o nlogn 的時間複雜度。代價是需要額外的記憶體空間...