ホームページ >バックエンド開発 >PHPチュートリアル >PHP は 4 つの基本的な並べ替えアルゴリズムを実装しています

PHP は 4 つの基本的な並べ替えアルゴリズムを実装しています

WBOY
WBOYオリジナル
2016-06-13 12:17:03807ブラウズ

PHP は 4 つの基本的な並べ替えアルゴリズムを実装しています

多くの人は、アルゴリズムがプログラムの中核であり、アルゴリズムの品質がプログラムの品質を決定すると言います。私はジュニア PHPer ですが、アルゴリズムに関することにはほとんど触れていません。ただし、基本的なソート アルゴリズムはプログラム開発に不可欠なツールであるため、マスターする必要があります。ここでは、バブル ソート、挿入ソート、選択ソート、クイック ソートの 4 つの基本アルゴリズムを紹介し、アルゴリズムの考え方を分析します。

前提: バブルソート、クイックソート、選択ソート、挿入ソートを使用して、以下の配列内の値を小さい順にソートします。
$arr(1,43,54,62,21,66,32,78,36,76,39);
1. バブルソート

アイデア分析: 並べ替える数値のグループ内で、現在並べ替えられていないシーケンスについて、大きい数値が下に下がり、小さい数値が上がるように、隣接する 2 つの数値を前から後ろに比較して調整します。つまり、2 つの隣接する数値が比較され、その順序が順序要件と逆であることが判明した場合は常に、それらの数値が交換されます。

コード実装:

Java コード
  1. $arr=array(1 43546221663278367639); 関数 bubbleSort($arr)
  2. {
  3. $len= count($arr); //このレイヤー ループは、
  4. for($ i=1;$i
  5. { //これループのレイヤーは、数値がポップアップする回数を制御するために使用され、各ラウンドで比較する必要があります
  6. for($k=0;$k
  7. { if
  8. ($arr[$k]>$arr[$k
  9. 1])
  10. { $tmp=$arr[$k 1
  11. ] ;
  12. $arr[$k 1]=$arr[$k];
  13. $arr[$k]=$tmp; }
  14. }
  15. return $arr;
  16. 2. 🎜>
  17. アイデア分析: 並べ替える一連の数値から、最小の数値を選択します。最初の位置の数値と入れ替えます。次に、残りの数値の中から最小のものを見つけて、それを 2 番目の数値と交換します。このサイクルは、最後から 2 番目の数値が最後の数値と比較されるまで続きます。 コード実装: Java コード
    1. function selectSort($arr) {
    2. //二重ループが完了、外側のコントロールのラウンド番号、内側のコントロールの比較番号
    3. $len=count($arr);
    4. for( $i =0; $i1; $i ) {
    5. //最初に最小値の位置を仮定します
    6. $p = $i
    7. for($j=$i 1; $j
    8. //$arr[$p] は現在知られている最小値
    9. if($arr[$p] > $arr[$j]) {
    10. //比較して小さい方を見つけ、最小値の位置を記録し、次の比較で既知の最小値を使用します。
    11. $p = $j;
    12. }
    13. }
    14. //現在の最小値の位置が決定され、$p に保存されました。最小値の位置が現在仮定されている位置$iと異なることが判明した場合には、位置を入れ替えることができる。
    15. if($p != $i) {
    16. $tmp = $arr[$p];
    17. $arr[$p] = $arr[$i]; $arr[$i] = $tmp;
    18. }
    19. } >
    20. // 最終結果を返す
    21. return $arr;
    22. }
    23. 3. 挿入ソート
    アイデア分析: ソートされる順序で、次のように仮定します。前の数値はすでに順序が揃っています。ここで、これらの n 数値も順序どおりになるように、前の順序の数値に n 番目の数値を挿入する必要があります。すべてが整うまでこのサイクルを繰り返します。 コード実装:


    Java コード

    1. function insertSort($arr) {
    2. $len=count($arr);
    3. for($i=1, $i<$len; $i ) {
    4. $tmp = $arr[$i];
    5. // 内部ループ制御、比較および挿入
    6. for($j=$i-1;$j>=0;$j--) {
    7. if($tmp < $arr[$j]) {
    8. //挿入された要素を小さくし、位置を交換し、次の要素を前の要素と交換する必要があることが判明しました
    9. $arr[$j 1] = $arr[$j];
    10. $arr[$j] = $tmp;
    11. } else {
    12. //移動する必要のない要素が見つかった場合、それはソートされた配列であるため、前の要素を再度比較する必要はありません。
    13. ブレイク;
    14. } >
    15. }
    16. }
    17. return $arr;
    18. }


    4. クイックソート
    アイデア分析:基本要素 (通常は最初の要素または最後の要素) を選択します。 1 回のスキャンで、ソート対象の列が 2 つの部分に分割され、1 つの部分は参照要素より小さく、もう 1 つの部分は参照要素以上になります。このとき、ベース要素はソート後の正しい位置にあり、分割された 2 つの部分も同様に再帰的にソートされます。

    コード実装:

    Java コード
      1. function QuickSort($arr) {
      2. //まず続行する必要があるかどうかを決定します
      3. $length = count($arr);
      4. if($length <= 1) {
      5. return $arr; }
      6. //最初の要素をベースとして選択します
      7. $base_num = $arr[0
      8. ]
      9. //ルーラーを除くすべての要素を走査します。それらをベースラインより小さいサイズ
      10. >
      11. $left_array = array(); // に従って 2 つの配列に入れます
      12. $right_array = array (); // ベンチマーク
      13. より大きい($i=1 ; $i
      14. //それを左の配列に入れます
      15. $left_array[] = $arr[$i] } else { >
      16. //右側に配置
      17. $right_array [] = $arr[$i];
      18. } }
      19. //次に、左と右の配列でそれぞれ同じソートを実行します。処理方法は、この関数を再帰的に呼び出すことです。
      20. $left_array = Quick_sort( $left_array);
      21. $right_array = Quick_sort($right_array);
      22. //マージ
      23. return
      24. array_merge($left_array, array($base_num), $right_array);
      25. } 🎜>1F
      26. feimengv
      27. 良い並べ替え方法、重要なのは使用することです合理的にプログラムの効率を向上させます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。