ホームページ > バックエンド開発 > PHPチュートリアル > PHPの再帰メソッドで実装されたクイックソート

PHPの再帰メソッドで実装されたクイックソート

墨辰丷
リリース: 2023-03-31 22:26:01
オリジナル
3103 人が閲覧しました

この記事では、主に PHP のクイック ソート アルゴリズムの 2 つの例を紹介します。この記事では、それぞれ再帰的メソッドと反復メソッドを使用して実装された実装コードを直接示します。

# PHP などの Web アプリケーション開発では、ソートの重要性はあまり重視されません。PHP 自体には、sort() などの強力なソート関数がすでに備わっているためです。ただし、特定の高同時実行性など、いくつかの重要な場面ではソートが重要になります。場合によっては、ソートアルゴリズムの影響は無視できないと思います。そこで、ここでは再帰的並べ替えと反復的並べ替えを紹介します。

再帰的メソッド:

/**
* 递归法实现的快速排序
*/
function quicksort($seq)
{
    $k = $seq[0];
    $x = array();
    $y = array();
    for($i=1; $i< $_size; $i++) {
      if($seq[$i] <= $k) {
        $x[] = $seq[$i];
      } else {
        $y[] = $seq[$i];
      }
    }
    $x = quicksort($x);
    $y = quicksort($y);
    return array_merge($x, array($k), $y);
  } else {
    return $seq;
  }
}
ログイン後にコピー

反復的メソッド:

/**
* 迭代法的快速排序
*/
function quicksortx(&$seq)
{
  $stack = array($seq);
  $sort = array();
  while ($stack) {
    $arr = array_pop($stack);
    if(count($arr) <= 1) {
      if(count($arr) == 1) {
        $sort[] = &$arr[0];
      }
      continue;
    }
    $k = $arr[0];
    $x = array();
    $y = array();
    $_size = count($arr);
    for($i =1 ;$i < $_size; $i++) {
      if($arr[$i] <= $k) {
        $x[] = &$arr[$i];
      } else {
        $y[] = &$arr[$i];
      }
    }
    !empty($y) && array_push($stack, $y);
    array_push($stack, array($arr[0]));
    !empty($x) && array_push($stack, $x);
  }
  return $sort;
}
ログイン後にコピー

使用:

/**
*产生一个随机数组
*/
for($i=0;$i<5;$i++){
  $testArr[]=mt_rand(0,100);
}
var_dump($testArr);
var_dump(quicksort($testArr));

var_dump(quicksortx($testArr));
ログイン後にコピー

まとめ: 以上がこの記事の全内容です。皆様の学習に少しでもお役に立てれば幸いです。

関連する推奨事項:

画像のクライアント側およびサーバー側のアップロードを実装するための php メソッド

ファイルのダウンロードを制御するための php コードSpeed

php は配列を使用してドロップダウン リスト ボックスを設定します

以上がPHPの再帰メソッドで実装されたクイックソートの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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