4つの基本的なソートアルゴリズムのPHPコード実装

4つの基本的なソートアルゴリズムのPHPコード実装

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

[[129906]]

前提条件: バブル ソート、クイック ソート、選択ソート、挿入ソートを使用して、次の配列の値を小さい順に並べ替えます。

1,43,54,62,21,66,32,78,36,76,39 をコピーします。

1. バブルソート

思考分析:分類する数字のグループにおいて、現在分類されていない数列について、前方から後方へ順番に隣接する 2 つの数字を比較して調整し、大きい数字が下がり、小さい数字が上がるようにします。つまり、隣接する 2 つの数値を比較し、その順序が順序要件と逆であることがわかった場合は、それらの数値が交換されます。

  1. $arr = 配列 ( 1 43 54 62 21 66 32 78 36 76 39 );
  2. 関数 bubbleSort($arr)
  3. {
  4. $len = count($arr);
  5. //このレイヤーループは必要なバブリングの回数を制御します 
  6. ($i= 1 ;$i<$len;$i++)の場合
  7. { // このループ層は、各ラウンドで数字が出現する回数を制御し、比較する必要がある回数を制御するために使用されます。  
  8. ($k= 0 ;$k<$len-$i;$k++)の場合
  9. {
  10. ($arr[$k]>$arr[$k+ 1 ])の場合
  11. {
  12. $tmp=$arr[$k+ 1 ];
  13. $arr[$k+ 1 ] = $arr[$k];
  14. $arr[$k] = $tmp;
  15. }
  16. }
  17. }
  18. $arrを返します
  19. }

2. 選択ソート

思考分析: 並べ替える数字のグループの中で、最も小さい数字を選択し、最初の位置の数字と交換します。次に、残りの数字の中から最小の数字を見つけて、それを 2 番目の位置の数字と交換し、最後から 2 番目の数字が最初の数字と比較されるまでこのサイクルを繰り返します。

  1. 関数selectSort($arr) {
  2. //二重ループが完了しました。外側の層はラウンド数を制御し、内側の層は比較回数を制御します。  
  3. $len = count($arr);
  4. ($i= 0 ; $i<$len- 1 ; $i++)の場合{
  5. //まず最小値の位置を想定する 
  6. $p = $i;
  7.  
  8. ($j=$i+ 1 ; $j<$len; $j++)の場合{
  9. //$arr[$p]は現在知られている最小値です 
  10. ($arr[$p] > $arr[$j])の場合{
  11. // 比較して小さい方を見つけ、最小値の位置を記録します。そして、次回の比較には既知の最小値を使用します。  
  12. $p = $j;
  13. }
  14. }
  15. //現在の最小値が決定され、$p に保存されました。最小値の位置が現在想定されている位置 $i と異なることが判明した場合、位置を交換することができます。  
  16. ($p != $i)の場合{
  17. $tmp = $arr[$p];
  18. $arr[$p] = $arr[$i];
  19. $arr[$i] = $tmp;
  20. }
  21. }
  22. //最終結果を返す 
  23. $arrを返します
  24. }

#p#

3. 挿入ソート

思考分析: 並べ替える数字のグループでは、前の数字がすでに順序どおりになっていると仮定して、n 番目の数字を前の順序どおりになっている数字に挿入して、これらの n 個の数字も順序どおりになるようにする必要があります。すべてが正常になるまでこのサイクルが繰り返されます。

  1. 関数 insertSort($arr) {
  2. $len = count($arr);
  3. ($i= 1 、$i<$len; $i++)の場合{
  4. $tmp = $arr[$i];
  5. //内部ループ制御、比較、挿入 
  6. ($j=$i- 1 ;$j>= 0 ;$j--)の場合{
  7. ($tmp < $arr[$j])の場合{
  8. //挿入された要素が小さいことがわかったので、位置を入れ替え、後者の要素を前の要素と入れ替えました 
  9. $arr[$j+ 1 ] = $arr[$j];
  10. $arr[$j] = $tmp;
  11. }それ以外{
  12. // 移動する必要のない要素に遭遇した場合、それはソートされた配列であるため、以前の要素を再度比較する必要はありません。  
  13. 壊す;
  14. }
  15. }
  16. }
  17. $arrを返します
  18. }

4. クイックソート

思考分析: ベースライン要素 (通常は最初の要素または最後の要素) を選択します。 1 回のスキャンで、ソートするシーケンスが 2 つの部分に分割され、1 つの部分はベンチマーク要素よりも小さく、もう 1 つの部分はベンチマーク要素以上になります。このとき、ベンチマーク要素はソート後に正しい位置に配置され、その後同じ方法を再帰的に使用して 2 つの分割部分をソートします。

  1. 関数クイックソート($arr) {
  2. //まず続行するかどうかを決定する 
  3. $arr の長さを数えます。
  4. ($length <= 1 )の場合{
  5. $arrを返します
  6. }
  7. //最初の要素をベンチマークとして選択する 
  8. $base_num = $arr[ 0 ];
  9. //ルーラー以外のすべての要素を走査し、サイズに応じて2つの配列に格納します 
  10. // 2つの配列を初期化する 
  11. $left_array = array(); // ベンチマークより小さい 
  12. $right_array = array(); //ベンチマークより大きい 
  13. ($i= 1 ; $i<$length; $i++)の場合{
  14. ($base_num > $arr[$i])の場合{
  15. //左の配列に挿入 
  16. $left_array[] = $arr[$i];
  17. }それ以外{
  18. //右側に置く 
  19. $right_array[] = $arr[$i];
  20. }
  21. }
  22. // 次に、左と右の配列を同じようにソートしてこの関数を再帰的に呼び出します 
  23. クイックソート
  24. クイックソート
  25. //マージ 
  26. array_merge($left_array、array($base_num)、$right_array)を返します
  27. }

<<:  DxRアルゴリズムのアイデアに基づいて設計されたルーティングアイテム配置構造の図

>>:  プログラマーが知っておくべき 10 個の基本的な実用的なアルゴリズムとその説明_IT テクノロジー ウィークリー 402 号_51CTO.com

ブログ    

推薦する

...

EasyDL モデルのトレーニングから EdgeBoard 推論までのステップバイステップ ガイド

まとめ: EdgeBoard は Baidu が開発した FPGA ベースの組み込み AI ソリュー...

...

将来、人工知能技術は動物実験に取って代わる可能性を秘めているのでしょうか?

動物実験は動物に対して行われる最も残酷な行為の一つと考えられています。研究によると、マウス、カエル、...

2024年に誰もが備えるべき5つのテクノロジートレンド

機械知能、現実と仮想の境界線の曖昧化、そしてインターネットの継続的な進化は、私たちの生活に根本的な影...

MITの画期的技術トップ10

MITテクノロジーレビューは毎年、その年の「トップ10のブレークスルーテクノロジー」を選出していま...

可視性プラットフォームがセキュリティ オペレーション センター (SOC) にとって重要な理由は何ですか?

ディスプレイ ソリューションは、今日のセキュリティ オペレーション センター (SOC) で必要な複...

NLP/CVモデルは国境を越えて、ビジュアルトランスフォーマーはCNNを超えるのか?

コンピュータービジョンの分野では、畳み込みニューラルネットワーク (CNN) が常に市場を支配してき...

ホワイトペーパー「マシンビジョンセキュリティカメラの画質評価手法に関する調査レポート」を公開

近年、マシンビジョンの成熟度が増すにつれ、マシンビジョン評価やイメージング能力評価が徐々に導入されて...

ビッグデータと人工知能がオンラインゲームをどう変えるのか

2017 年に成熟したと言われる 2 つの技術的進歩があるとすれば、それは間違いなく仮想現実と人工知...

...

...

Java プログラミング スキル - データ構造とアルゴリズム「分割統治アルゴリズム」

[[398991]]アルゴリズムの紹介分割統治アルゴリズムは非常に重要です。文字通りの説明は「分割...