¿Por qué el método de ordenación Javascript organiza los números de una matriz en orden ascendente con [código] (a – b) [/ código] y descendente con [código] (b – a) [/ código]?

No creo que sea realmente arbitrario.

Imagina escribir la especificación. El usuario proporciona una función de clasificación que puede devolver tres valores:

  • valor [math] A [/ math] cuando el orden de los dos elementos es correcto
  • valor [math] B [/ math] cuando el orden es insignificante (los dos elementos son iguales en la mayoría de los casos)
  • valor [math] C [/ math] cuando se debe intercambiar el orden de los dos elementos

¿Cuáles son los valores de [matemáticas] A [/ matemáticas], [matemáticas] B [/ matemáticas] y [matemáticas] C [/ matemáticas] que tienen más sentido?

Según yo es:

  • [matemática] -1 [/ matemática] significa intercambiar los elementos
  • [matemática] 0 [/ matemática] significa que el orden es insignificante
  • [matemáticas] 1 [/ matemáticas] significa que el orden es correcto

Para facilitar el desarrollo, decimos que

  • [matemática] <0 [/ matemática] significa intercambiar los elementos
  • [matemática] 0 [/ matemática] significa que el orden es insignificante
  • [matemáticas]> 0 [/ matemáticas] significa que el orden es correcto

para que podamos escribir

array.sort ((a, b) => ab)

para ordenar los números

Es arbitrario.

La función anónima se entrega para ordenar y comparar elementos. Si devuelve un valor negativo cuando se aplica a dos elementos, entonces se interpreta que significa que los números están en el orden correcto. Si devuelve un valor positivo, se interpreta que significa: orden incorrecto.

Podría haber sido al revés; esa es una decisión arbitraria, aunque se hace de la misma manera en otros lenguajes, particularmente en la función qsort utilizada en C.

Los diseñadores de JavaScript probablemente se apegaron a la convención establecida por los idiomas anteriores para evitar confundir a las personas innecesariamente.

La función de comparación definida por el usuario es utilizada por la función Array.prototype.sort para comparar valores en la matriz para determinar el orden correcto.

La forma en que funciona la función para ordenar funciona es la siguiente

Si devuelve un número positivo, entonces a viene primero

Si devuelve 0, deje el pedido sin modificar

Si devuelve un número negativo, entonces b es lo primero.

Como tal, a – b producirá el orden ascendente correcto para los números y b – a para los números descendentes.

More Interesting

¿Qué representa un estado en términos de programación dinámica?

¿Cuáles son las amplias variedades en programación dinámica que se preguntan con frecuencia en los concursos de codificación?

Cómo construir un algoritmo automatizado de comercio de acciones utilizando mis estrategias sin tener que contratar un programador

¿Los programas que simulan la evolución tienen algún efecto en los creacionistas?

¿Se ha encontrado alguna solución para los problemas de NP completo?

¿Qué patrones de diseño y algoritmos comunes necesito saber para el desarrollo de Android?

¿Cómo uso cualquier biblioteca en Java que implemente la selección de funciones del algoritmo RELEIFF?

¿Cuáles son algunos algoritmos geniales que se pueden usar para el reconocimiento de objetos y cómo los usamos?

¿Cuál es la mejor manera de demostrar sus habilidades como ingeniero de software junior durante una entrevista que no sea la implementación de algoritmos sofisticados y estructuras de datos?

¿Cómo verifico si un número binario es divisible por decir 'n'?

¿Por qué la longitud de una matriz siempre es mayor que el índice más grande de la matriz?

Dado un volumen que consiste en un número de ubicaciones dentro de un espacio tridimensional definido, y a cada una de estas ubicaciones se le asigna algún número, ¿hay alguna métrica obvia que se pueda aplicar que mida la complejidad de la distribución de las mediciones?

¿Cuáles son algunas de las mejores grandes empresas y startups para trabajar en Silicon Valley si te apasionan los algoritmos y la codificación?

Cómo resolver radicales anidados como [math] (a + \ sqrt b \,) ^ {1/3} [/ math]

Cómo aprender algoritmos anticolisión RFID