PHP 歸併排序

2021-06-13 05:54:30 字數 829 閱讀 7220

<?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 的時間複雜度。代價是需要額外的記憶體空間...