php--バブル、選択、挿入、高速の4つの基礎ソート

13593 ワード

バブルソート
構想分析:法はその名の通り、泡のように、配列の中から最大の数が出る.
第1ラウンド:最初から最後の泡まで比較し、実行結果:最後の最大
第2ラウンド:最初から最後から2番目のバブル比較、運転結果:最後の最大(現在のホイールの最後)
このように...
$arr=array(1,43,54,62,21,66,32,78,36,76,39);  

function getpao($arr)

{  

  $len=count($arr);

  //                 

  //              

  for($i=1;$i<$len;$i++)

  { //                        

    for($k=0;$k<$len-$i;$k++)

    {

       if($arr[$k]>$arr[$k+1])

        {

            $tmp=$arr[$k+1];

            $arr[$k+1]=$arr[$k];

            $arr[$k]=$tmp;

        }

    }

  }

  return $arr;

} 

 
ソートの選択
構想分析:対応する要素を選択するたびに、指定した場所に配置します.
≪第1ラウンド|Firstラウンド|emdw≫:第1ビットから最小の要素を選択して第1ビットに配置します(比較して、$pに小さな下付きラベルを保存し、現在の位置の要素と交換します).
第2ラウンド:第2ビットから(第1ビットはすでに最小数)最小の要素を第1ビット(配列全体の第2ビット)に配置します.
順番に類推する...
function select_sort($arr) {

//           ,      ,      。          

    //$i         ,          

    for($i=0, $len=count($arr); $i<$len-1; $i++) {

        //          

        $p = $i;

        //$j             ,$i    。

        for($j=$i+1; $j<$len; $j++) {

            //$arr[$p]           

            if($arr[$p] > $arr[$j]) {

     //  ,     ,         ;        ,

 //               。

                $p = $j;

            }

        }

        //              ,   $p 。

 //                   $i  ,       

        if($p != $i) {

            $tmp = $arr[$p];

            $arr[$p] = $arr[$i];

            $arr[$i] = $tmp;

        }

    }

    //      

    return $arr;

}

 
ソートの挿入
構想解析:ソートする要素を、ソート番号が想定されている配列の指定された場所に挿入します.
1ラウンド目:2番目の要素と1番目の要素を比較し、小さい場合は位置を交換します.
第2ラウンド:第3の要素と第2の要素を比較し、小さい場合は第3の第2の要素の位置を交換します.
交換後の2番目の要素と1番目の要素を比較し、小さい場合は2番目の1番目の要素の位置を交換します.
2輪が下りて、前の3つの要素の大きさはすでに並べて、次の過程は順番に類推して、各輪はそれぞれ前のすべての要素と比較して、前の要素より小さくなければ、動かない;前の要素より小さい場合は、すぐに交換します.
function insert_sort($arr) {

    //             

    //         

    //             

    //               ,                  

    //           

    //i              ,             ,

    //          2  ,       (   ),       

    for($i=1, $len=count($arr); $i<$len; $i++) {

        //

        $tmp = $arr[$i];

        //              

        for($j=$i-1;$j>=0;$j--) {

   //$arr[$i];//       ; $arr[$j];//       

            if($tmp < $arr[$j]) {

                //         ,    

                //              

                $arr[$j+1] = $arr[$j];

                //                 

                $arr[$j] = $tmp;

            } else {

                //            

           //           ,             。

                break;

            }

        }

    }

    //                  。

    //  

    return $arr;

}

 
クイックソート
構想分析:最初の要素を参照数にして、それからそれぞれ2つの配列を設定して、参照数より小さいのは左の配列の中に置きます;参照数より大きいものは右の配列に配置します.順番に類推する...(再帰)
1、基準要素を見つけます.
2、配列内の他のすべての要素を比較する.
3、基準要素と比較した結果を大きさによって2つの異なる配列に入れる.
4、配列再帰呼び出し関数自身;
5、並べ替えられた配列を返す(array_merge()
再帰点かいきてん:配列はいち
再帰出口:配列要素が1つ(または空)しかない場合
<?php



    //    

    //     

    $arr = array(6,3,8,6,4,2,9,5,1);



    //        

    function quick_sort($arr){

        //           

        if(!is_array($arr)) return false;



        //    :     1       

        $length = count($arr);

        if($length <= 1) return $arr;



        //       

        $left = $right = array();



        //  for      ,             

        for($i = 1;$i < $length;$i++){

            //          

            if($arr[$i] < $arr[0]){

                //

                $left[] = $arr[$i];

            }else{

                $right[] = $arr[$i];

            }

        }



        //    

        $left = quick_sort($left);

        $right = quick_sort($right);



        //        

        return array_merge($left,array($arr[0]),$right);

    }



    echo '<pre>';

    //  

    print_r(quick_sort($arr));