ホームページ  >  記事  >  バックエンド開発  >  PHPバブルソートの簡単な理解

PHPバブルソートの簡単な理解

韦小宝
韦小宝オリジナル
2018-03-06 13:38:391693ブラウズ

PHP にはさまざまな種類のソートが含まれますが、バブル ソート はおそらく私が使用する最も面倒なソートです。この記事では、PHP のバブル ソートについて簡単に説明します。私のような人はバブルソーティングについてあまり知りません。

1. バブルアルゴリズム

バブリングに関する記事をいくつか読みましたが、各ループの境界値に関する考え方は常に比較的一般的です。

初心者にとっては暗記するのは簡単ではありません。

でも、アルゴリズムは暗記しやすいので、時間が経つと忘れてしまいやすいので、一度書いて、できるだけ一つ一つの考え方を書き留めて、理解しやすいようにしました。 . 一度理解すると、より深い印象が残り、なかなか忘れられなくなります。

バブル アルゴリズム、コアは

1. ループ比較 隣接する 2 つの 配列 のサイズを毎回比較し、最大の配列を後ろに置くことで、すべての比較が 1 回ループされ、配列は最大の数値を配列の最後に置きます

2. 次に、ループを繰り返します (上記の比較ループを繰り返します): 現時点では、最後の値はループ時にループに参加する必要はありません。最大のものであると判断されました。つまり、はループを繰り返し、比較配列はどんどん小さくなっていきます。最後に、配列要素は 1 つだけ残ります。ループの終わり

コードレベルを見てください:

$arr=array(5,4,3,6,7,1,2,10,8,9);

ペアごとの比較から始めます

if($arr[$i]>$arr[$i+1]){//相邻比较 这个应该比较容易理解吧
        $tem=$arr[$i];
        $arr[$i]=$arr[$i+1];
        $arr[$i+1]=$tem;
    }

上記のコードは、2 つの配列の隣接する値を比較し、大きい方を後ろに置くことです。最大の $i は配列 index の前の桁であることがわかります。そうでない場合、$arr[$i+1] は存在せず、比較できません。つまり $i<count($ar)-1;$i の初期値は 0 です

内部比較ループから始めましょう

一般for ループこのように書きます

for($i=0;$i<$xx;$i++){
    if($arr[$i]>$arr[$i+1]){//相邻比较 这个应该比较容易理解吧
        $tem=$arr[$i];
        $arr[$i]=$arr[$i+1];
        $arr[$i+1]=$tem;
    }
} 

上記のアイデア各比較サイクルは最初の最初の要素から開始されるため、$i の開始値は 0 です。サイクルが 1 回繰り返されると、次のサイクルでは比較される要素が 1 つ少なくなります。ここで $xx はどんどん小さくなっていきますが、この $xx をどうやって決定するのでしょうか?

最初のサイクルの $xx の値はいくらですか?上記のペアごとの比較により、count($ar)-1

$xx という結論が得られます。最後の値は何ですか?上記のペアごとの比較から得られる結論は 1 です。

つまり、$xxはcount($arr)-$kです。$kは累積比較サイクルであり、これを(サイクルを1回繰り返す)に変更できます

for($i=0;$i<count($arr)-$k;$i++){
    if($arr[$i]>$arr[$i+1]){//相邻比较
        $tem=$arr[$i];
        $arr[$i]=$arr[$i+1];
        $arr[$i+1]=$tem;
    }
} 

この$kをもう一度見てください。これ、$k はランダムではありませんか? サイクルを繰り返すと累積されます。 以下のように繰り返しループコードを追加します

$k がどのように境界値を決定するかを見てみましょう。 上で述べたように、$xx の境界値は count($arr)-1 から 1 までとなります。数学的アルゴリズム $k の境界値は count($arr)-1

に対して 1 として出力され、それをループ $k=1;$k

要約は

for($k=1;$k<count($arr);$k++){
    for($i=0;$i<count($arr)-$k;$i++){ 
        if($arr[$i]>$[$i+1]){
            $temparr= $arr[$i];
            $arr[$i] =$arr[$i+1];
            $arr[$i+1] = $temparr;
        }
    }
}
です

もっと練習したほうが良いです。理解できない知識は、もう一度書くことで理解できることがあります。

以上がPHPバブルソートの簡単な理解の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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