PHP での一般的なソート例の詳細な説明

小云云
リリース: 2023-03-21 13:58:01
オリジナル
1270 人が閲覧しました

この記事では、主に PHP でよく使用される並べ替えの例について詳しく説明します。お役に立てれば幸いです。

$arr=array(1,43,54,62,21,66,32,78,36,76,39);
ログイン後にコピー

1. バブルソート

function bubbleSort ($arr)
{
    $len = count($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;
            }
        }
    }
    return $arr;
}
ログイン後にコピー

2. クイックソート

  1. 「ピボット」と呼ばれる要素を配列から取り出します

  2. すべての要素がピボットの値よりも小さくなるように配列を並べ替えますベースの前に配置され、ベースの値より大きい要素はすべてベースの後ろに配置されます (同じ数値をどちらの側にも配置できます)。このパーティションが終了すると、塩基はシーケンスの途中になります。これをパーティション操作と呼びます。

  3. 基本値より小さい要素の部分配列と基本値より大きい要素の部分配列を再帰的に並べ替えます。
    $arr=array(1,43,54,62,21,66,32,78,36,76,39);
    function Quick_sort($arr)
    {
    //パラメータが配列かどうかを判定する
    if ( !is_array($arr)) return false;
    //再帰終了: 配列の長さは 1 で、配列を直接返します
    $length = count($arr);
    if($length<=1) return $arr;
    / / 配列要素が複数ある場合は、空の配列を 2 つ定義します
    $left = $right = array();
    // for ループを使用して走査し、最初の要素を比較オブジェクトとして使用します
    for($i=1; $ i&lt; $ length; $ i ++) ;
    }


    3. 選択ソート


    まず、ソートされていないシーケンスの中で最小の要素を見つけて、それをソートされたシーケンスの開始位置に格納し、その後、ソートされていない残りの要素から最小の要素を探し続けます。ソートされたシーケンスの最後に置きます。すべての要素がソートされるまで続きます。


    //实现思路 双重循环完成,外层控制轮数,当前的最小值。内层 控制的比较次数
    $arr=array(1,43,54,62,21,66,32,78,36,76,39);
    function select_sort($arr) {
        //$i 当前最小值的位置, 需要参与比较的元素
        for($i=0, $len=count($arr); $i<$len-1; $i++) {
            //先假设最小的值的位置
            $p = $i;
            //$j 当前都需要和哪些元素比较,$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;
            }
        }
        //返回最终结果
        return $arr;
    }
    ログイン後にコピー

    4. 挿入ソート


    ソートされていないデータの場合、ソートされたシーケンスの後ろから前に向かってスキャンし、対応する位置を見つけて挿入します。


ソートされたとみなせる最初の要素から開始します

次の要素を取り出し、ソートされた一連の要素を後ろから前にスキャンします

If (並べ替えられた) 要素が新しい要素より大きい場合は、要素を次の位置に移動します

    並べ替えられた要素が新しい要素以下になる位置が見つかるまで手順 3 を繰り返します
  1. 新しい要素をその位置に追加します
  2. $arr=array(1,43,54,62,21,66,32,78,36,76,39);
    function insert_sort($arr)
    {
        $len=count($arr);
        for($i=1; $i<$len; $i++) {
            //获得当前需要比较的元素值。
            $tmp = $arr[$i];
            //内层循环控制 比较 并 插入
                for($j=$i-1; $j>=0; $j--) {
                //$arr[$i];//需要插入的元素; $arr[$j];//需要比较的元素
                    if($tmp < $arr[$j]) {
                        //发现插入的元素要小,交换位置
                        //将后边的元素与前面的元素互换
                        $arr[$j+1] = $arr[$j];
                        //将前面的数设置为 当前需要交换的数
                        $arr[$j] = $tmp;
                    } else {
                        //如果碰到不需要移动的元素
                        //由于是已经排序好是数组,则前面的就不需要再次比较了。
                        break;
                    }
                }
            }
        //将这个元素 插入到已经排序好的序列内。
        //返回
        return $arr;
    }
    ログイン後にコピー
    5 の手順を繰り返します。 辞書の並べ替え (つまり、配列内に同じ値が出現する回数)
  3. PHP には組み込み関数

    array_count_values があります。もちろん、自分でループすることもできます。

  4. 関連する推奨事項:

  5. JavaScriptでよく使用される基本的な並べ替えアルゴリズムの分析例

  6. 一般的に使用される並べ替えアルゴリズムの動的グラフィックの説明

    JavaScript_javascript スキルでよく使用される 9 つの並べ替えアルゴリズム

    以上がPHP での一般的なソート例の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート