アルゴリズムはプログラムの中核であり、アルゴリズムの品質がプログラムの品質を決定する、と多くの人が言います。私はジュニア PHPer ですが、アルゴリズムに関することにはほとんど触れていません。ただし、基本的なソート アルゴリズムはプログラム開発に不可欠なツールであるため、マスターする必要があります。ここでは、バブル ソート、挿入ソート、選択ソート、クイック ソートの 4 つの基本アルゴリズムを紹介し、アルゴリズムの考え方を分析します。
前提: バブル ソート、クイック ソート、選択ソート、挿入ソートを使用して、以下の配列内の値を小さいものから大きいものの順に並べ替えます。
$arr(1,43,54,62,21,66,32,78,36,76,39);
1. バブルソート
アイデア分析: ソートされる数値のセット内で、ソートされていない数値まだ並べ替えられていない 並べられた順序で、隣り合う 2 つの数字を前から後ろに比較して、大きい数字が沈み、小さい数字が上がるように調整します。つまり、2 つの隣接する数値が比較され、その順序が順序要件と逆であることが判明した場合は常に、それらの数値が交換されます。
コードの実装:
Javaコード
-
$arr=array(1,43,54,62,21,66,32,78,36, 76、39 );
関数 bubbleSort($arr)
{
$len=カウント($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;
}
}
- }
- 戻る$arr;
}
-
2. 選択ソート アイデア分析: ソートする一連の数字から最小の数字を選択し、最初の位置の数字と交換します。次に、残りの数値の中から最小のものを見つけて、2 番目の数値と交換します。このループは、最後から 2 番目の数値が最後の数値と比較されるまで続きます。 コードの実装:
- Javaコード
- 関数 selectSort($arr) {
- //二重サイクルが完了し、外側の層はラウンド数を制御し、内側の層は比較の数を制御します
- $len=カウント($arr);
- for($i=0; $i<$len-1; $i++) {
- //最初に最小値の位置を仮定します
$p = $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;
- }
- }
- //最終結果に戻る
- 戻る$arr;
}
-
3. 挿入ソート アイデア分析: ソートされる一連の数値において、前の数値がすでに順序どおりであると仮定して、今度は、これらの n 数値も順になるように、前の順序の数値に n 番目の数値を挿入する必要があります。注文。すべてが整うまでこのサイクルを繰り返します。 コードの実装:
-
Javaコード
関数 insertSort($arr) {
$len=カウント($arr);
for
($i=1, $i<$len; $i++) { -
$tmp = $arr[$i] - ;
//内部ループ制御、比較および挿入
- for($j=$i-1
;$j>=
- 0;$j--) {
-
if($tmp < $arr[$j]) {
//挿入された要素が小さい場合は、位置を交換し、後の要素を前の要素と入れ替えます
-
$arr[$j+1] = $arr[$j]
- ;
$arr[$j] = $tmp;
} else
{ -
//移動する必要のない要素が見つかった場合、それはソートされた配列であるため、前の要素を再度比較する必要はありません。
- 休憩;
- }
}
- }
戻る$arr;
- }
-
4. クイックソート
アイデア分析: ベンチマーク要素 (通常は最初の要素または最後の要素) を選択します。 1 回のスキャンで、ソート対象の列が 2 つの部分に分割され、1 つの部分は参照要素より小さく、もう 1 つの部分は参照要素以上になります。このとき、ベース要素はソート後の正しい位置にあり、分割された 2 つの部分も同様に再帰的にソートされます。 - コードの実装:
- Javaコード
- 関数 QuickSort($arr) {
- //まず続行する必要があるかどうかを判断してください
- $length = count($arr);
- if($length <= 1) {
- 戻る$arr;
}
- //最初の要素をベースとして選択します
-
$base_num = $arr[0];
- //ルーラーを除くすべての要素をトラバースし、サイズに従って 2 つの配列に配置します
- //2つの配列を初期化します
$left_array = array(); - //ベンチマークより小さい
$right_array = array(); - //ベンチマークよりも優れています
- for($i=1; $i<$length; $i++) {
-
if($base_num > $arr[$i]) {
- //それを左の配列に入れます
$left_array[] = $arr[$i];
- } else {
-
//右側に置いてください
-
$right_array[] = $arr[$i];
} -
}
- //次に、左と右の配列に対して同じソートを実行し、この関数を再帰的に呼び出します
-
$left_array = クイックソート($left_array) -
$right_array = クイックソート($right_array);
- //マージ
-
return
array_merge($left_array, array($base_num), $right_array);
- }
-
上記では、PHP における 4 つの基本的な並べ替えアルゴリズムの実装を、関連する側面も含めて紹介しました。PHP チュートリアルに興味のある友人にとって役立つことを願っています。
-