91 votes

Comment la fonction de tri fonctionne-t-elle en JavaScript, ainsi que la fonction de comparaison ?

Comme nous l'avons déjà demandé, comment fonctionne la fonction de tri en JavaScript, avec la fonction compare fonction ? Si j'ai un tableau et que je fais array.sort(compare) Or, il est écrit dans le livre que si le compare les retours de fonction a-b (deux indices du tableau), cela fonctionne en fonction du fait que le résultat est supérieur à 0, inférieur à 0 ou égal à 0. Mais comment cela fonctionne-t-il exactement ? Je n'ai pas réussi à le comprendre.

0 votes

Qu'avez-vous besoin de savoir exactement ? Je suis presque sûr que l'algorithme de tri utilisé est spécifique à l'implémentation.

0 votes

La fonction de comparaison a un rapport avec le fonctionnement du tri, ne compare-t-elle pas simplement les deux variables et ne me donne-t-elle pas le résultat pour ces deux variables, comment le tableau entier est-il trié ?

0 votes

1voto

Nicolas Mellado Points 11

Vous pouvez utiliser Uint32Array pour créer le tableau.

[ [https://i.stack.imgur.com/qBgvm.png\]](https://i.stack.imgur.com/qBgvm.png])

mais elle présente quelques difficultés. Par exemple, il n'est pas possible d'ajouter une nouvelle valeur au tableau. Simplement, vous ne pouvez pas modifier la longueur du tableau.

0voto

alexyangfox Points 105

Je pense que c'est comme ça (enfin, je n'en suis pas sûr).

supposons que la fonction compare(a,b) est la fonction de comparaison. Elle renvoie c . supposons que nous allons trier les entrées du tableau N pour obtenir le tableau des résultats du tri M .

Je ne connais pas l'algorithme de tri exact, et les différents navigateurs renvoient même des résultats différents si c n'est ni (a-b) ni (b-a) (par exemple, si c es "b-2" , "a+b" ou d'autres expressions).

Mais d'après ECMA-262 le résultat du tri devrait être le suivant :

a , b peuvent être deux index quelconques. cela signifie que nous avons passé une paire ordonnée à la fonction de comparaison. eg: (0,1),(1,4), or even (2,0) , (2,1) .

La spécification du langage ECMAScript indique que le résultat doit avoir cette propriété : (a,b) est une paire ordonnée transmise à la fonction de comparaison.

  • si c (ce que la fonction retourne) est inférieur à zéro, alors M(a)< M(b) doivent être satisfaites.

Et la spécification ne dit rien sur ce qui se passerait si c était égal à zéro ou supérieur à zéro.

Je ne suis pas sûr que cela soit correct. En tout cas, cela peut facilement expliquer pourquoi lorsque c es "a-b" Les entrées sont triées numériquement et par ordre croissant, et pourquoi lorsque les entrées sont triées numériquement et par ordre croissant, et pourquoi lorsque les entrées sont triées numériquement et par ordre croissant. c es "b-a" Les entrées sont triées dans l'ordre inverse.

Est-ce que les moteurs js des navigateurs ne sont pas conçus strictement selon la norme `ECMA-262 ou est-ce que je me trompe complètement ?

Référence

La cinquième édition de l'ECMA-262 (voir pages 129-130)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X