PHP は 4 つの基本的な並べ替えアルゴリズムを実装しています。PHP には 4 つのアルゴリズムがあります
多くの人は、アルゴリズムがプログラムの中核であり、アルゴリズムの品質がプログラムの品質を決定すると言います。私はジュニア 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++)
-
{
//このループ層は、各ラウンドで数値を比較する必要がある回数を制御するために使用されます-
-
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;
- }
- }
- //最終結果に戻る
- }
-
3. 挿入ソート アイデア分析: 並べ替える一連の数値において、前の数値がすでに順序どおりであると仮定して、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;
}
- //最初の要素をベースとして選択します
-
];
- //ルーラーを除くすべての要素をトラバースし、サイズに従って 2 つの配列に入れます
- //2つの配列を初期化します
$left_array = array(); - //ベンチマークより小さい
$right_array = array(); - //ベンチマークよりも優れています
- for($i=
-
if($base_num > $arr[$i]) {
- //それを左の配列に入れます
$left_array[] = $arr[$i];
- }
-
//右側に置きます
-
$right_array[] = $arr[$i];
} -
- //次に、左と右の配列に対して同じソートを実行し、この関数を再帰的に呼び出します
-
$left_array = クイックソート($left_array) -
$right_array = クイックソート($right_array);
-
return
array_merge($left_array, array($base_num), $right_array);
- }
-
http://www.bkjia.com/PHPjc/973828.html- www.bkjia.com本当http://www.bkjia.com/PHPjc/973828.html
技術記事- PHP には 4 つの基本的な並べ替えアルゴリズムが実装されており、アルゴリズムの品質がプログラムの品質を決定すると多くの人が言います。ジュニアPherperとして、ほとんど接触することはありませんが...
-