選択ソート
道:その上の第二の第1ビットの比較のサイズを見つけるために、他の人の間で、その後二位、最小の番号を見つけるために、他のサイズの第1ビットの比較をしましょう、と
$ ARR = [2,45,12,67,33,5,23,132,46 ]。 以下のために($ I = 0; $ iが < 数($ arrが ;)$私は ++ ){ のために($ jを = $ I +1; $ jの < 数($ arrが); $ jの ++ ){ 場合($をARR [ $ I ]> $のARR [ $のJ ]){ $ TMP = $ ARR [ $ I ]。 $ ARR [ $ I] = $ ARR [ $ jを]; $ ARRの [の$ jを ] = $ TMP ; } } } ますprint_r($のARR)。
バブルソート
方法:位置とソート隣接する二つのデータの比較
車輪選別if_replace追加フィールドが完了したか否かを選別の背面を完了するために、継続しない場合は、決定:最適化を
$ ARR = [2,45,12,67,33,5,23,132,46 ]。 $のif_replace = 偽; 以下のために($ I = 0; $ iの < 数($のARRを); $ iの ++ ){ のために($ jを = 0; $ jの < 数($のARR)-1; $ jの ++ ){ 場合($のARR [ $ J ]> $ ARRの [用$ jを +1 ]){ $ TMP = $ ARR [ $ J]; $ ARRの [ $ jを ] = $ ARR [ $ jを +1 ]; $のARR [ $ jを +1] = $ TMP ; $ if_replaceは = 真; } } もし(!$のif_replace {) 破ります。 } } ますprint_r($のARR)。
挿入ソート
方法は:順序付けられたシーケンスの構築は、ソートされていないデータのために、後ろから前にソートされた順序でスキャンし、インサートの対応する位置を見つけるために、
$ ARR = [2,45,12,67,33,5,23,132,46 ]。 用($ I ; = 0 $ iが < カウント($ ARR ;)-1 $ iが ++ ){ ため($ J = $ I +1; $ jを 0> $ J - {) であれば($ ARR [ $ jの < $ ARR [ $ J -1 ]){ $ TMP = $ ARR [ $のJ ]。 $ ARRの [の$ jを ] = $ ARR [$ jを -1 ]; $ ARRの [の$ jを -1] = $ TMP ; } 他{ 破ります。 } } } ますprint_r($のARR)。
ヒルソート
方法:セットは、配列の要素をソートしなければならないn個の要素は、最初に、全体増分サブシーケンスにスペーサ要素として整数インクリメント(nより小さい)かかり
それぞれ、同じサブシーケンスの増分からのすべての要素をサブ直接挿入ソート実装されています。
そして、狭い間隔の増分、分割を繰り返し、作業シーケンスをランク付けします。最後の増分= 1まで考慮すると、同じサブシーケンス内のすべての要素がこれまでに注文しました。
$ ARR = [2,45,12,67,33,5,23,132,46 ]。 $増分 = カウント数($のARR )。 やる{ $増分 = 床($増分は / 3)+1 ; 以下のために($ I = 0; $ iは < $増分を、$ iは ++ ){ $ K = 0 。 $ J = $ I ; 実行{ ため(M $ = $ J +の$増分 ; $ M > 0; $ Mを- = $インクリメント){ 場合($ ARR [ $ M - $インクリメント ]> $ ARR [ $ M ] && $ ARR [ $ M ]){ $ TMP = $ ARR [ $のM ]。 $のARR [ $のM ] = $ ARR [ $ M - $増分]。 $ ARR [ $ M - $インクリメント ] = $ TMP 。 } 他{ 破ります; } } $ K ++ ; $ jを = $ I +($ kは *の$増分)。 } 間($ jの < 数($のARR )); } } ながら($増分 > 1 )。 しますprint_r($ arrの);
クイックソート
:それの右側にフルカウントより大きく、それは、その左側に全体の数以下であるので、各部の動作をわずか数まで、参照番号として数字の列の開始番号を削除
$ ARR = [33、24、8、21、2、23、3、32、16 ]。 機能クイックソート($ ARR ) { $カウント = カウント数($のARR )。 もし($数 <2 ){ リターン の$ arrが。 } $ leftArray = $ rightArray = 配列(); $中央 = $ ARR [0]。// 基准值 用($ I = 1; 私は$ < $カウント ; 私は$ ++ ){ //左側に格納された基準値よりも、右側に記憶された基準値より大きい IF($ ARR [ $ I < $ミドル){ $ leftArray [] = $ ARR [ $ I ]; } 他{ $ rightArray [] = $ ARR [ $ I ]; } } $ leftArray =クイック($ leftArray ); $ rightArray =クイック($ rightArray ); 戻り array_merge($ leftArray、アレイ($真ん中)$ rightArray )。 } ますprint_r(クイック($のARR))。