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

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

最近人気の大型モデルや自動運転コンセプトについてお話ししましょう。

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...

機械学習の基本概念を10枚の画像で説明する

機械学習の基本的な概念を説明するとき、私はいつも限られた数の図に戻ってしまいます。以下は、私が最も啓...

...

2018年の世界人工知能データから将来の発展傾向を見る

[[255801]]人工知能は新たな産業変革の中核的な原動力として、これまでの科学技術革命と産業変革...

...

世界初の「サイボーグ」が死んだ!さようなら、ピーター 2.0

2020年、ピーター・スコット・モーガン博士はインターネットで話題になりました。人気の検索タイトル...

コグニティブコンピューティングによる運用・保守は効果的でしょうか?

[51CTO.com からのオリジナル記事] 人工知能は最近とても人気があります。人々の焦点は、A...

医療提供者はなぜインテリジェントオートメーションに投資する必要があるのでしょうか?

インテリジェント オートメーション (IA) は、人工知能とオートメーションを組み合わせたものです。...

OpenAIの仮説が覆される!計算量を考慮すると、小さいモデルの方が大きいモデルよりも優れています。Llama 2 のトレーニングは GPU コンピューティングに関連しています。

モデルを推論する際には、収束が遅いために計算能力を無駄にしないようにすることが重要です。孫子の兵法に...

中国と米国の間で技術冷戦が勃発するだろうか?人工知能は「引き金」

現在、米国は人工知能分野で世界をリードしているが、中国も急速に追い上げており、中国がその主導的能力を...

素晴らしいツールです!機械学習のためのテキスト注釈ツールとサービス 10 選

この記事は、公開アカウント「Reading the Core」(ID: AI_Discovery)か...

仮病を使って休暇を取る時代は終わり?イスラエルの企業が、45秒で病気を装う従業員を識別できるAIプログラムを開発

海外で流行が猛威を振るう中、多くの企業は従業員にリモートワークをさせざるを得ない状況となっている。そ...

人工知能とビッグデータを開発する際に留意すべき12のこと

人工知能は近年の科学技術発展の重要な方向です。ビッグデータの時代において、データの収集、マイニング、...

...

新人新社、企業の急成長を支援する人事システムのデータデュアルエンジン版を発表

5月21日、新人新市は北京で2021年新人新市ブランドアップグレード記者会見を開催した。今回の記者会...