ホームページ >バックエンド開発 >PHPチュートリアル >PHP を使用して 4 つの一般的な並べ替えアルゴリズムとその実装原則を実装する
PHP を使用して 4 つの一般的な並べ替えアルゴリズムとその実装原則を実装します
******挿入ソート(一次元配列)
1. 最初の要素から始めて、要素はソートされていると見なされます
2. 次の要素を取り出し、ソートされた要素シーケンス
を後ろから前にスキャンします。
3. (ソートされた) 要素が新しい要素より大きい場合、要素を次の位置
に移動します。
4. 並べ替えられた要素が新しい要素
以下となる位置が見つかるまで、手順 3 を繰り返します。
5. 新しい要素をこの位置に挿入します
6. 手順 2 を繰り返します
*/
関数 insert_sort($arr)
{
??? $len = count($arr);
??? ($i=1; $i<$len; $i++)
??? {
??????? $tmp = $arr[$i];
??????? $j = $i-1;
??????? while ($arr[$j] > $tmp && $j>=0)
??????? {
??????????$arr[$j+1] = $arr[$j];
??????????$j--;
???????}
??????? $arr[$j+1] = $tmp;
???}
??? $arr を返します;
}
/*
******バブルソート(一次元配列)
1. 隣接する要素を比較します。最初のものが 2 番目のものより大きい場合は、両方を交換します。
2. 隣接する要素の各ペアに対して、最初の最初のペアから最後の最後のペアまで、同じ作業を実行します。この時点では、最後の要素が最大の数値である必要があります。
3. 最後の要素を除くすべての要素に対して上記の手順を繰り返します。
4. 比較する数値のペアがなくなるまで、要素の数を減らしながら上記の手順を繰り返します。
*/
関数 bubble_sort($arr)
{
??? $len = count($arr);
??? ($i=0; $i
??? {
??????? for ($j=$len-1; $j>$i; $j--)
??????? {
???????????? if ($arr[$j-1] > $arr[$j])
???????{
???????????? $tmp = $arr[$j-1];
??????????????? $arr[$j-1] = $arr[$j];
???????????? $arr[$j] = $tmp;
??????????}
???????}
???}
??? $arr を返します;
}
/*
******選択ソート(一次元配列)
1. まず、ソートされていないシーケンスで最小の要素を見つけ、それをソートされたシーケンスの開始位置
に格納します。
2. 次に、ソートされていない残りの要素から最小の要素を検索し、それをソートされたシーケンスの最後に置きます。
3 など、すべての要素が並べ替えられるまで続きます。
*/
関数 select_sort($arr){
??? $count = count($arr);
??? for($i=0; $i
??? {
??????? $k = $i;
??????? for($j=$i+1; $j
??????? {
???????????? if ($arr[$k] > $arr[$j])
???????{
??????????????? $k = $j;
??????????}
???????}
??????? if ($k != $i)
??????? {
??????????$tmp = $arr[$i];
???????????? $arr[$i] = $arr[$k];
??????????$arr[$k] = $tmp;
???????}
????}
??? $arr を返します;
}
/*
******クイックソート(一次元配列)
1. まず中間値をランダムに選択します
2. 中央の値より小さい値を左側に、中央の値より大きい値を右側に置きます
3. 次に、左側と右側のデータに対してそれぞれステップ 1 と 2 を再帰的に呼び出して、左側、中央、右側のデータをマージします。
*/
関数クイックソート($arr)
{
??? if (count($arr)
??? {
??????? $arr を返す;
???}
??? $key = $arr[0];
??? $left_arr = 配列();
??? $right_arr = 配列();
??? for ($i=1; $i
??? {
??????? if ($arr[$i]
??????? それ以外は? $right_arr[] = $arr[$i];
???}
??? $left_arr = クイックソート($left_arr);
??? $right_arr = クイックソート($right_arr);
??? return array_merge($left_arr, $key, $right_arr);
}
$a = 配列(123,321,432,341345,45234,53,493);
echo "";<br><br>
print_r(select_sort($a));<br><br>
print_r(bubble_sort($a));<br><br>
print_r(insert_sort($a));<br><br>
print_r(quick_sort($a));<br><br>
echo "
";