ホームページ  >  記事  >  バックエンド開発  >  phpでのクイックソートの使用例を詳しく解説

phpでのクイックソートの使用例を詳しく解説

伊谢尔伦
伊谢尔伦オリジナル
2017-07-01 10:21:551448ブラウズ

この記事では、主にPHPクイックソートquicksortの実装方法を紹介します。クイックソートの原理と、クイックソートを実装するためのPHPの関連操作スキルをサンプルの形式で分析します。この記事の例では、PHP クイック ソート ソート クイックソートについて説明します。参考のために皆さんと共有してください。詳細は次のとおりです:

クイックソート

クイックソートアルゴリズムでは、分割統治戦略が使用されます。まず、シーケンスが 2 つのサブシーケンスに分割され、シーケンス全体がソートされるまでサブシーケンスが再帰的にソートされます。 (つまり、2つに分割するという考え方です)

手順は次のとおりです:

シーケンス内のキー要素を軸として選択します シーケンスを並べ替えて、軸より小さい要素を移動します。軸の大きい要素は軸の後ろに移動されます。分割後、軸は最終位置にあります。

は 2 つのサブシーケンス (小さい要素を持つサブシーケンスと大きい要素を持つサブシーケンス) を再帰的に並べ替えます。

たとえば、シーケンス $arr:

5 3 0 11 44​​ 7 23 2 最初の要素 $arr[0] = 5 を軸として設定し、フラグを low に設定します... トップは始まりを表し、 end

2 3 0 11 44​​ 7 23 2 の方向 (右) で比較を開始します: 22 3 0 11 44​​ 7 23 11 の方向で比較を開始します反対方向 (左) まで: 5low == top になるまで上記の手順を繰り返します 位置を軸要素 (5

2 3 0 5 44 7 23 11
) に置き換えますこのようにして、2 3 0 と 44 23 11 の 2 つの部分に分割できます
このようにして、開始ステップを再帰的に続行することができます


アルゴリズムの実装:

class quick_sort{
    function quicksort(&$arr,$low,$top){
      if($low < $top){
        $pivotpos = $this->partition($arr,$low,$top);
        $this->quicksort($arr,$low,$pivotpos-1);
        $this->quicksort($arr,$pivotpos+1,$top);
      }
    }
    function partition(&$arr, $low ,$top){
      if($low == $top){
        return;
      }
  //   设置初始数值
      $com = $arr[$low];
      while($low!=$top){
  //      将比初始数值小的替换到左边
        while($top&&$top!=$low){
          if($com > $arr[$top]){
          $arr[$low++] = $arr[$top];
          break;
          }else{
            $top--;
          }
        }
  //      将比初始数值大的替换到右边
        while($low&&$low!=$top){
          if($com < $arr[$low]){
            $arr[$top--] = $arr[$low];
            break;
          }else{
            $low++;
          }
        }
      }
      $arr[$low] = $com;
      return $low;
    }
}

以上がphpでのクイックソートの使用例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。