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

ブログ    

推薦する

説明可能なAI: 4つの主要産業

[[267801]] AI システムがどのように意思決定を行うかを人々が理解できるようにする説明可能...

[探索] 機械学習モデルのトレーニングをサポートする 8 つの JavaScript フレームワーク

[[221813]] [51CTO.com クイック翻訳] JavaScript 開発者は、さまざま...

顔認識の速度に影響を与える要因は何ですか?

実際のアプリケーションでは、顔認識は認識精度に対する要求が高いだけでなく、高い効率も求められます。特...

...

ナレッジグラフは自然言語処理の未来でしょうか?

ナレッジグラフは NLP の未来でしょうか?今は2021年で、かつて全盛期だった多くの技術は長い間無...

人工知能のインダストリー4.0指標8つ

インダストリー 4.0 における AI イニシアチブの主要な運用指標と主要業績評価指標 (KPI) ...

...

民間ドローンの産業応用シナリオに関する簡単な議論

[[357620]]科学技術の発展に伴い、人類は機械工学、材料科学、電子技術、自動制御、コンピュータ...

CMU と ETH が画期的な成果を達成: 敏捷性が最大限に高められたロボット犬は、スピードと安全性を兼ね備え、超高速で障害物を乗り越えることができます。

高速ロボット動作の分野では、速度と安全性の両立が常に大きな課題となっています。しかし今、カーネギーメ...

人工知能について知っておくべき基礎知識はすべてここにあります

21 世紀に革命をもたらした技術を 1 つ挙げるとすれば、それは人工知能でしょう。人工知能は私たちの...

機械学習開発ガイド(基礎編)

【51CTO.comオリジナル記事】序文機械学習は人工知能の分野で重要な部分を占めています。簡単に...

CommScope Insights: データセンターが AI をより迅速かつコスト効率よく活用する方法

人気のSF小説で「機械知能の台頭」が描かれる場合、通常はレーザーや爆発などのシーンが伴います。それほ...

...