マージソート
アレイは、それぞれ、左および右の部分に分割し、その後選別、最終的にマージされます
パブリック 関数 _sort(&$ ARR、左$、$右){ IF($左 < $右){ // 正しい未満をすれば、丸め、中間値を削除します。再帰的プロセスを入力します。 $ MID = フロア(($左 + $右)/ 2 ); $この - > _ソート($ ARR、$左、$ MID ); $この - > _ソート($ ARR、$ MID + +1、$右)。 この$ - > _マージ($ arrが、$左、$ MID、$右); } } パブリック 関数 _merge(&$ ARR、左$、$ MID、$右){ $ I = 左$ 、 $ J = $ MID + +1 ; $ TMP = []; // 両者の最小値は、一時的なアレイに配置され、取り出しました。ループのうち、クロスボーダーの場合。 一方、($ I <= $ MID && $ J <= $右){ IF($のARR [ $ I <ARR $ [ $ J ]){ $ TMP [] = $ ARR [ $ I ++ ]; } 他{ $ TMP [] = $ ARR [ $ J ++ ]; } } // 存在が残っているかどうかを決意は、あります残りの部分はtmpに残される全て入れ ながら($ Iは = < $ MIDを){ $ TMP [] = $ ARR [ $ I ++ ]; } // 決意、権利が存在し、右側の残りの部分の全てが存在することになりますtmpが中に置かれ ながら、($ J <= $権利){ $ TMP [] = $ ARR [ $ J ++ ]; } //は一時配列ARR $にデータをコピー するための($ K = 0、$ LEN = COUNT($ TMP); $ K < lenの$。K $ ++ ){ $のARR [ $左 + $ K ] = $ TMP [ $ K ]; } }