Heim  >  Artikel  >  Backend-Entwicklung  >  Einfaches Verständnis der PHP-Blasensortierung

Einfaches Verständnis der PHP-Blasensortierung

韦小宝
韦小宝Original
2018-03-06 13:38:391693Durchsuche

Es gibt viele Arten der Sortierung in PHP, und die Blasensortierung ist wahrscheinlich die mühsamste Sortierung, die ich verwende, nachdem ich sie schon lange durchgeführt habe PHP-Blasensortierung Die Sortierung eignet sich sehr gut für Leute wie mich, die nicht viel über Blasensortierung wissen!

1. Blasenalgorithmus

Ich habe mehrere Artikel über Blasenbildung gelesen, aber immer für die Grenze jeder Schleife Der Wertgedanke ist relativ allgemein.

Für Anfänger ist es nicht einfach, es mir zu merken.

Aber bei Algorithmen ist es einfach, sie auswendig zu lernen, sodass man sie nach langer Zeit leicht vergisst. Deshalb habe ich sie einmal geschrieben und versucht, jede Idee so weit wie möglich aufzuschreiben, damit sie funktioniert ist leichter zu verstehen. Sobald Sie es verstanden haben, wird es Ihr Bild vertiefen und es wird nicht leicht sein, es zu vergessen.

Der Kern des Blasenalgorithmus ist

1. Schleifenvergleich Vergleichen Sie jedes Mal die Größe zweier benachbarter Arrays und setzen Sie dann das größte Array ein Am Ende werden alle Vergleiche einmal durchlaufen und die größte Zahl im Array wird am Ende des Arrays platziert

2. Dann wiederholen Sie die Schleife (wiederholen Sie die obige Vergleichsschleife): Wann Schleife zu diesem Zeitpunkt Der letzte Wert muss nicht an der Schleife teilnehmen, da festgestellt wurde, dass er der größte ist. Mit anderen Worten: wiederholt die Schleife und das Vergleichsarray wird immer kleiner. Schließlich ist nur noch ein Array-Element übrig. Ende der Schleife

Sehen Sie sich die Codeebene an:

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

Beginnen Sie mit dem paarweisen Vergleich

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

Der obige Code dient zum Vergleichen zweier Arrays Die Werte sind groß und klein, und die größeren werden später platziert. Es ist ersichtlich, dass das größte $i das vor dem Array index ist, andernfalls existiert $arr[$i+1] nicht und kann nicht verglichen werden. Das heißt, $i<count($ar)-1; der Anfangswert von $i ist 0

Beginnen Sie mit der inneren Vergleichsschleife

Im Allgemeinenfor-SchleifeSchreiben Sie so

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

Wie oben erwähnt, beginnt jede Vergleichsschleife mit dem ersten Element am Anfang, sodass der Startwert von $i 0 ist. Wiederholen Sie die Schleife einmal. und dann gibt es in diesem Zyklus ein Element weniger zum Vergleichen. Hier wird $xx immer kleiner; wie kann man dann diesen $xx bestimmen?

Wie hoch ist der Wert von $xx im ersten Zyklus? Der obige paarweise Vergleich führt zur Schlussfolgerung count($ar)-1

Was ist der letzte Wert von $xx? Die Schlussfolgerung aus dem obigen paarweisen Vergleich ist 1.

Das heißt, $xx ist count($arr)-$k $k ist die kumulative Vergleichsschleife, die geändert werden kann in (Wiederholung der Schleife einmal pro Zyklus)

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;
    }
} 

Schauen Sie sich das noch einmal an. $k Denken Sie darüber nach: Steigt $k nicht kumulativ mit wiederholten Zyklen? Fügen Sie den wiederholten Schleifencode wie folgt hinzu

Schauen wir uns an, wie $k den Grenzwert bestimmt. Wie oben erwähnt, ist der Grenzwert von $xx count($arr)-1 bis 1. Das war es definiert. Dann wird der mathematische Algorithmus $k Der Grenzwert ergibt sich als 1 to count($arr)-1

und wird in die Schleife geschrieben, die $k=1;$k

Die Zusammenfassung ist

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;
        }
    }
}

Ich hoffe, Sie können es besser verstehen. Manchmal schreiben wir das Wissen, das wir nicht verstehen, noch einmal auf.

Das obige ist der detaillierte Inhalt vonEinfaches Verständnis der PHP-Blasensortierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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