ホームページ > バックエンド開発 > PHPチュートリアル > PHP 配列のクイックソートとマージソート

PHP 配列のクイックソートとマージソート

WBOY
リリース: 2024-04-26 12:45:02
オリジナル
1138 人が閲覧しました

クイック ソートは、配列を小さい要素と大きい要素に分割して再帰的に並べ替える再帰的アルゴリズムですが、マージ ソートは配列を小さい配列に再帰的に分割し、それぞれの小さい配列を並べ替えてから元の配列を返します。 PHP によって実装されるコードは次のとおりです。 クイック ソート: 配列をベースライン値より小さい要素と大きい要素に分割し、各部分を再帰的にソートします。マージソート: 配列を再帰的に小さな配列に分割し、それぞれの小さな配列をソートし、ソートされた小さな配列を元の配列にマージして戻します。

PHP 数组快排 vs. 归并排序

#PHP 配列のクイック ソートとマージ ソート

#クイック ソートとマージ ソートとは何ですか?

クイック ソートとマージ ソートはどちらも、配列のソートに使用される一般的なアルゴリズムです。

  • クイック並べ替え: 配列を 2 つの部分に分割し、1 つは小さな要素を含み、もう 1 つは大きな要素を含み、各部分を再帰的に並べ替えます。
  • マージソート: 配列を小さな配列に再帰的に分割し、それぞれの小さな配列をソートし、ソートされた小さな配列を元の配列にマージして戻します。

コードの実装

次に、PHP で実装されたクイック ソート関数とマージ ソート関数を示します:

クイック ソート:

function quickSort($arr) {
    if (count($arr) <= 1) {
        return $arr;
    }
    $pivot = $arr[0];
    $left = [];
    $right = [];
    for ($i = 1; $i < count($arr); $i++) {
        if ($arr[$i] < $pivot) {
            $left[] = $arr[$i];
        } else {
            $right[] = $arr[$i];
        }
    }
    return array_merge(quickSort($left), [$pivot], quickSort($right));
}
ログイン後にコピー

マージ ソート:

function mergeSort($arr) {
    $length = count($arr);
    if ($length <= 1) {
        return $arr;
    }
    $mid = floor($length / 2);
    $left = array_slice($arr, 0, $mid);
    $right = array_slice($arr, $mid);
    return merge(mergeSort($left), mergeSort($right));
}

function merge($left, $right) {
    $result = [];
    $lIndex = $rIndex = 0;
    while ($lIndex < count($left) && $rIndex < count($right)) {
        if ($left[$lIndex] < $right[$rIndex]) {
            $result[] = $left[$lIndex++];
        } else {
            $result[] = $right[$rIndex++];
        }
    }
    while ($lIndex < count($left)) {
        $result[] = $left[$lIndex++];
    }
    while ($rIndex < count($right)) {
        $result[] = $right[$rIndex++];
    }
    return $result;
}
ログイン後にコピー

実用的なケース

順序なし整数配列を検討してください

[5 , 2 、8、3、1、9、4、7、6].

クイックソートを使用する:

$sortedArray = quickSort([5, 2, 8, 3, 1, 9, 4, 7, 6]);
print_r($sortedArray);
ログイン後にコピー

出力:

[1, 2, 3, 4, 5, 6, 7, 8, 9]
ログイン後にコピー
ログイン後にコピー

マージソートを使用する:

$sortedArray = mergeSort([5, 2, 8, 3, 1, 9, 4, 7, 6]);
print_r($sortedArray);
ログイン後にコピー

出力:

[1, 2, 3, 4, 5, 6, 7, 8, 9]
ログイン後にコピー
ログイン後にコピー

以上がPHP 配列のクイックソートとマージソートの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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