Maison > interface Web > js tutoriel > Explication détaillée de la méthode de tri des bulles

Explication détaillée de la méthode de tri des bulles

一个新手
Libérer: 2017-10-06 10:41:44
original
2867 Les gens l'ont consulté

Méthode de tri des bulles

HTML5 Academy-Coder : ce numéro continue de présenter l'algorithme - méthode de tri des bulles. L'algorithme de tri à bulles est relativement simple, facile à utiliser et relativement stable. Il s'agit d'un algorithme relativement facile à comprendre et l'un des algorithmes sur lesquels les enquêteurs posent fréquemment des questions.

Conseils : Les connaissances de base de « l'algorithme » et du « tri » ont été expliquées en détail dans la précédente « Méthode de tri par sélection ». Vous pouvez cliquer sur le lien de l'article correspondant à la fin de l'article pour le voir. , et je ne le répéterai pas ici.

Principe du tri des bulles

Principe de base

Parcourez à partir de la tête de la séquence, comparez-les deux à deux, si la première est plus grande que la seconde, échangez les positions jusqu'à la fin Échange le plus grand nombre (le plus grand nombre dans ce tri) à la fin de la séquence non ordonnée, faisant ainsi partie de la séquence ordonnée

Lors du prochain parcours, le nombre maximum après chaque parcours précédent ne sera pas ne participe plus Trier

Répétez cette opération plusieurs fois jusqu'à ce que la séquence soit triée.

Parce que dans le processus de tri, les décimales sont toujours placées en avant et les grands nombres sont placés en arrière, semblables à des bulles flottant progressivement vers le haut, c'est ce qu'on appelle le tri à bulles.

Schéma de principe

Conseils : Le bleu représente l'attente d'un échange dans un tour de tri, le noir représente l'échange terminé dans ce tour de tri, le rouge représente le tri terminé

算法之旅 | 冒泡排序法 - 独行冰海 - 独行冰海

Réaliser une décomposition par étapes bouillonnantes

Utiliser une boucle for pour déterminer le nombre de tri

Puisque l'ordre peut déjà être déterminé lorsqu'il ne reste qu'un seul numéro dans la séquence à être trié, il n'est pas nécessaire qu'un tri soit effectué, donc le nombre de tris est la longueur de la séquence – 1.

算法之旅 | 冒泡排序法 - 独行冰海 - 独行冰海

Contrôlez le nombre de comparaisons pour chaque tri

Chaque tri, plusieurs nombres de la séquence doivent être comparés par paires, plusieurs comparaisons sont nécessaires Utilisez le pour la déclaration pour y parvenir. Cette boucle for est imbriquée dans la boucle for des heures triées (formant un nid de doubles fors).

算法之旅 | 冒泡排序法 - 独行冰海 - 独行冰海

Conseils : j doit être réglé sur moins que len - i - 1. La raison de la soustraction de i est que les nombres triés ne sont plus impliqués dans la comparaison. La raison de la soustraction de 1 est que le tableau se trouve sous les valeurs d'index commençant à 0.

Fonction principale - comparez les paires et échangez les positions en fonction de la situation

Comparez la taille de deux nombres si le premier est plus grand que le second, échangez les valeurs, c'est-à-dire échangez les positions. .

算法之旅 | 冒泡排序法 - 独行冰海 - 独行冰海

Code complet du tri à bulles

算法之旅 | 冒泡排序法 - 独行冰海 - 独行冰海

Optimisation du tri à bulles

Si la séquence Les données est : [0, 1, 2, 3, 4, 5] ;

utilise la méthode de tri à bulles ci-dessus pour trier, et le résultat obtenu ne pose certainement aucun problème, mais la séquence à trier est dans l'ordre Oui , en théorie, il n'est pas nécessaire de parcourir le tri.

L'algorithme actuel effectuera un tri traversant, que la séquence initiale soit ou non dans l'ordre, et l'efficacité sera relativement faible, l'algorithme de tri actuel doit donc être optimisé.

Dans l'algorithme suivant, une variable d'échange est introduite et initialisée à false avant chaque tri ; si deux nombres échangent leurs positions, définissez-la sur true.

A la fin de chaque tri, il est jugé si le swap est faux. Si c'est le cas, cela signifie que la séquence a été triée ou que la séquence elle-même est une séquence ordonnée, et le tri suivant ne sera pas effectué. .

Grâce à cette méthode, les comparaisons inutiles et les échanges de positions sont réduits, améliorant encore les performances de l'algorithme.

算法之旅 | 冒泡排序法 - 独行冰海 - 独行冰海

Efficacité de la méthode de tri des bulles

Complexité temporelle

Meilleur état : la séquence à trier elle-même est une séquence ordonnée, selon le code optimisé, on peut conclure que le nombre de tri est n-1 fois, et la complexité temporelle est O(n)

Dans le pire des cas : la séquence à trier est dans l'ordre inverse, et 1 doit être trié à ce moment + 2 +3…(n - 1) = n(n – 1)/2 fois

La complexité temporelle est O(n^2).

Complexité spatiale

La méthode de tri à bulles nécessite un espace supplémentaire (variable temporaire) pour échanger la position des éléments, la complexité spatiale est donc O(1).

Stabilité de l'algorithme

Lorsque les éléments adjacents sont égaux, il n'est pas nécessaire d'échanger les positions et l'ordre des mêmes éléments ne changera pas. Il s'agit donc d'un tri stable.

Qu'est-ce que O ? !

La complexité temporelle, plus précisément, décrit la courbe de croissance temporelle d'un algorithme à mesure que la taille du problème continue d'augmenter. Par conséquent, ces ordres de grandeur d’augmentation ne constituent pas une évaluation précise des performances et peuvent être compris comme une approximation. (Il en va de même pour la complexité spatiale)

O(n?) signifie que lorsque n est suffisamment grand, la complexité est approximativement égale à Cn ?, C est une certaine constante, en termes simples, lorsque n est suffisamment grand. , À mesure que n croît linéairement, la complexité augmentera carrément.

O(n) signifie que lorsque n est très grand, la complexité est approximativement égale à Cn, et C est une certaine constante. En bref : à mesure que n croît de manière linéaire, la complexité augmente selon une échelle linéaire.

O(1) signifie que lorsque n est très grand, la complexité n'augmente pratiquement pas. En bref : à mesure que n croît linéairement, la complexité n'est pas affectée par n et croît selon un niveau constant (la constante ici est 1).

算法之旅 | 冒泡排序法 - 独行冰海 - 独行冰海

Conseils : Sur l'image, O(1) est proche de l'axe X et n'est pas visible clairement.

Conseils : Cette image provient du site Web "Stack Overflow".

Liens vers des articles connexes

Sélectionnez la méthode de tri

Soyez heureux chaque jour

La vie est dure et le codage n'est pas facile, mais n'oubliez pas de le faire sourire!

算法之旅 | 冒泡排序法 - 独行冰海 - 独行冰海

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