PHP 歸併排序

2022-06-13 12:42:12 字數 1015 閱讀 6228

1、原理

歸併排序是一種概念上最簡單的排序演算法,與快速排序一樣,歸併排序也是基於分治法的。歸併排序將待排序的元素序列分成兩個長度相等的子串行,為每乙個子串行排序,然後再將他們合併成乙個子串行。合併兩個子串行的過程也就是兩路歸併。

2、複雜度

歸併排序是一種穩定的排序演算法,歸併排序的主要問題在於它需要乙個與待排序陣列一樣大的輔助陣列空間。由於歸併排序每次劃分時兩個子串行的長度基本一樣,所以歸併排序最好、最差和平均時間複雜度都是nlog2n

。 通過下圖非常容易看懂歸併排序的過程:

遞迴拆分,直到剩下乙個元素,我們認為他是有序的

function fen(&$arr, $start, $end)}

function merge(&$arr,$start,$mid,$end

)else

}//將左邊剩餘的元素放入臨時陣列

while($i

<=$mid

)

//將右邊剩餘的元素放入臨時陣列

while($j

<=$end

)

//因為前面操作的都是臨時陣列,而歸併操作的事原陣列,所以還要把臨時陣列中的元素放入原陣列中

for($k = 0;$k

}測試:

$args = [15, 20, 3, 8, 55, 6, 88, 33, 21, 19, 36, 56, 77];

$start = 0;

$end = count($args) - 1;

fen(

$args,$start,$end

);echo "";

print_r($args);

輸出結果為:

PHP 歸併排序

歸併排序 function guisort arr 如果成員很多,那麼對左邊 歸併,對右邊歸併 mid floor count 2 left guisort array slice arr,0,mid right guisort array slice arr,mid 左半數組的大小,右半陣列的大小...

php實現歸併排序

歸併排序是建立在歸併操作上的一種有效的排序演算法,該演算法是分治法的乙個典型應用。將已有序的子串行合併,得到完全有序的序列,即先使每個子串行有序,在使子串行段間有序。若將兩個有序表合併為乙個有序表,稱為二路歸併。如圖,從下往上,每一步都需將兩個已經有序的子串行合併成乙個大的有序陣列 合併兩個有序陣列...

排序演算法之 歸併排序 php

歸併排序 merge sort 是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。和選擇排序一樣,歸併排序的效能不受輸入資料的影響,但表現比選擇排序好的多,因為始終都是 o nlogn 的時間複雜度。代價是需要額外的記憶體空間...