Compréhension simple du tri à bulles PHP

韦小宝
Libérer: 2023-03-20 20:22:02
original
1713 Les gens l'ont consulté

Il existe de nombreux types de tri impliqués dans PHP, et le Tri à bulles est probablement le tri le plus gênant que j'utilise. Je ne le comprends toujours pas après l'avoir fait pendant une longue période. Tri à bulles PHP Le tri est très adapté aux personnes comme moi qui ne connaissent pas grand-chose au tri à bulles !

1. Algorithme de bulle

J'ai lu plusieurs articles sur le bouillonnement, mais toujours pour la limite de chaque boucle l’idée de valeur est relativement générale.

Ce n’est pas facile à retenir pour les novices. Je le mémorise généralement par cœur.

Mais pour les algorithmes, il est facile de les mémoriser par cœur, donc c'est facile de l'oublier après un long moment, alors je l'ai écrit une fois et j'ai essayé d'écrire chaque idée le plus possible, pour qu'elle est plus facile à comprendre. Une fois que vous l’aurez compris, cela approfondira votre image et il ne sera pas facile de l’oublier.

Le cœur de l'algorithme de bulle est

1. Comparaison de boucles À chaque fois, comparez les tailles de deux tableaux adjacents, puis placez le plus grand tableau à à la fin, toutes les comparaisons seront bouclées une fois, et le plus grand nombre du tableau sera placé à la fin du tableau

2. Répétez ensuite la boucle (répétez la boucle de comparaison ci-dessus) : Quand boucle à ce moment-là. La dernière valeur n'a pas besoin de participer à la boucle, car elle a été déterminée comme étant la plus grande. En d'autres termes, répète la boucle et le tableau de comparaison devient de plus en plus petit. Finalement, il ne reste qu'un seul élément du tableau. Fin de boucle

Regardez au niveau du code :

$arr=array(5,4,3,6,7,1,2,10,8,9);
Copier après la connexion

Commencez par une comparaison par paire

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

Le code ci-dessus consiste à comparer deux tableaux Le adjacent les valeurs sont grandes et petites, et les plus grandes sont placées plus tard. On voit que le plus grand $i est celui avant le tableau index , sinon $arr[$i+1] n'existe pas et ne peut pas être comparé. C'est-à-dire que $i<count($ar)-1 ; la valeur initiale de $i est 0

Commencez par la boucle de comparaison interne

Généralementboucle forÉcrivez comme ceci

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

Comme mentionné ci-dessus, chaque boucle de comparaison commence à partir du premier élément au début, donc la valeur de départ de $i est 0, répétez la boucle une fois, et puis Il y aura un élément de moins à comparer dans ce cycle. Ici, $xx deviendra de plus en plus petit ; alors comment déterminer ce $xx ?

Quelle est la valeur de xx $ dans le premier cycle ? La comparaison par paire ci-dessus mène à la conclusion count($ar)-1

$xx Quelle est la dernière valeur ? La conclusion tirée de la comparaison par paires ci-dessus est 1.

C'est-à-dire que $xx est le compte($arr) -$k $k est la boucle de comparaison cumulative, qui peut être modifiée en (en répétant la boucle une fois par cycle)

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;
    }
} 
Copier après la connexion

Regardez ceci à nouveau $k Pensez-y, $k n'augmente-t-il pas de manière cumulative avec des cycles répétés ? Ajoutez le code de boucle répétée comme suit

Voyons comment $k détermine la valeur limite comme mentionné ci-dessus, la valeur limite de $xx est count($arr)-1 à 1. Cela a été. défini. Ensuite, l'algorithme mathématique $k La valeur limite apparaît comme 1 pour count($arr)-1

et est écrite dans la boucle, qui est $k=1;$k

Le résumé est

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;
        }
    }
}
Copier après la connexion

J'espère que vous pourrez le comprendre. Il vaut mieux pratiquer davantage Parfois, nous écrivons deux fois plus les connaissances que nous ne comprenons pas.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal