Heim >Backend-Entwicklung >PHP-Tutorial >Detaillierte Erläuterung des PHP-Bubble-Sort-Algorithmus (Bubble Sort).

Detaillierte Erläuterung des PHP-Bubble-Sort-Algorithmus (Bubble Sort).

高洛峰
高洛峰Original
2016-11-22 11:05:161389Durchsuche

Vorwort

Blasensortierung bedeutet grob gesagt, zwei benachbarte Zahlen der Reihe nach zu vergleichen und dann nach der Größe bis zu den letzten beiden Ziffern zu sortieren. Da beim Sortiervorgang kleine Zahlen immer nach vorne und große Zahlen nach hinten gestellt werden, was dem Aufsteigen von Blasen gleichkommt, spricht man von Blasensortierung. Tatsächlich können Sie es im eigentlichen Prozess jedoch auch umgekehrt verwenden, je nach Ihren eigenen Bedürfnissen. Die großen Bäume werden nach vorne und die Dezimalstellen nach hinten gestellt.

Eigentlicher Kampf

Direkter Code:

<?php
/**
 * 冒泡排序算法示例
 */

// 这里以一维数组做演示
$demo_array = array(23,15,43,25,54,2,6,82,11,5,21,32,65);

// 第一层for循环可以理解为从数组中键为0开始循环到最后一个
for ($i=0;$i<count($demo_array);$i++) {
    // 第二层将从键为$i的地方循环到数组最后
    for ($j=$i+1;$j<count($demo_array);$j++) {
        // 比较数组中相邻两个值的大小
        if ($demo_array[$i] > $demo_array[$j]) {
            $tmp            = $demo_array[$i]; // 这里的tmp是临时变量
            $demo_array[$i] = $demo_array[$j]; // 第一次更换位置
            $demo_array[$j] = $tmp;            // 完成位置互换
        }
    }
}

// 打印结果集
echo &#39;<pre class="brush:php;toolbar:false">&#39;;
var_dump($demo_array);
echo &#39;
';

Laufendes Ergebnis:

array(13) {
  [0]=>
  int(2)
  [1]=>
  int(5)
  [2]=>
  int(6)
  [3]=>
  int(11)
  [4]=>
  int(15)
  [5]=>
  int(21)
  [6]=>
  int(23)
  [7]=>
  int(25)
  [8]=>
  int(32)
  [9]=>
  int(43)
  [10]=>
  int(54)
  [11]=>
  int(65)
  [12]=>
  int(82)
}

Aus den obigen Ergebnissen können wir das im Array sehen Die Reihenfolge der Schlüsselwerte wurde geändert und die Sortierung war erfolgreich.

Wenn der obige Algorithmus die Schlüsselwerte im Array entsprechend der Wertgröße von klein nach groß sortieren soll, wie kann man dann umgekehrt von groß nach klein vorgehen?

Es ist ganz einfach, ändern Sie einfach ein Vergleichssymbol wie folgt:

<?php
/**
 * 冒泡排序算法示例
 */

// 这里以一维数组做演示
$demo_array = array(23,15,43,25,54,2,6,82,11,5,21,32,65);

// 第一层for循环可以理解为从数组中键为0开始循环到最后一个
for ($i=0;$i<count($demo_array);$i++) {
    // 第二层将从键为$i的地方循环到数组最后
    for ($j=$i+1;$j<count($demo_array);$j++) {
        // 比较数组中相邻两个值的大小
        if ($demo_array[$i] < $demo_array[$j]) {
            $tmp            = $demo_array[$i]; // 这里的tmp是临时变量
            $demo_array[$i] = $demo_array[$j]; // 第一次更换位置
            $demo_array[$j] = $tmp;            // 完成位置互换
        }
    }
}

// 打印结果集
echo &#39;<pre class="brush:php;toolbar:false">&#39;;
var_dump($demo_array);
echo &#39;
';

Laufendes Ergebnis:

array(13) {
  [0]=>
  int(82)
  [1]=>
  int(65)
  [2]=>
  int(54)
  [3]=>
  int(43)
  [4]=>
  int(32)
  [5]=>
  int(25)
  [6]=>
  int(23)
  [7]=>
  int(21)
  [8]=>
  int(15)
  [9]=>
  int(11)
  [10]=>
  int(6)
  [11]=>
  int(5)
  [12]=>
  int(2)
}

Das war's, die Reihenfolge kann leicht geändert werden.

Erweiterung

Wenn Sie sich den obigen Code genau ansehen, werden Sie feststellen, dass es eine Stelle gibt, die es wert ist, beachtet zu werden, nämlich die Stelle, an der sich der Austausch von Variablen lohnt. Ja, das ist auch der Kernpunkt des Sprudelns. Wenn Sie diese Technik beherrschen, können Sie sie in Zukunft auch an anderen Stellen anwenden.

Hier werden wir ein wenig darüber sprechen.

Prinzip:

Jetzt gibt es zwei Variablen A und B, und die Anforderung besteht darin, ihre Werte auszutauschen.

Wenn wir die Frage sehen, denken wir vielleicht zuerst an eine direkte Zuweisung, aber wenn wir sie direkt zuweisen, wird einer von ihnen definitiv überschrieben, unabhängig davon, wer zuerst wem zugewiesen wird Die dritte Variable C speichert den Wert vorübergehend in A oder B, damit das gewünschte Ziel erreicht werden kann.

$c = $a; // 暂存
$a = $b; // b给a
$b = $c; // 暂存的a值再给b

Hinweis: Tatsächlich ist keine dritte Variable erforderlich. Es ist auch möglich, die Werte von A- und B-Variablen zu vertauschen Andere Methoden liegen daran, dass wir die Blasensortierung einführen, es handelt sich also einfach um eine zu große Erweiterung.

Zusammenfassung

Es gibt so viele Dinge über die Blasensortierung. Zusammenfassend gibt es zwei Hauptpunkte:

Schleifenvergleich

Schlüsselwerte austauschen

Wenn Sie diese beiden Punkte erfüllen können, sind Sie im Grunde in Ordnung. Natürlich gibt es viele Algorithmen für die Blasensortierung. Hier ist nur einer davon.


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:php – Iterator-SchnittstelleNächster Artikel:php – Iterator-Schnittstelle