Javascript 使用算术运算符与比较运算符对数字数组排序

Javascript 使用算术运算符与比较运算符对数字数组排序,javascript,arrays,performance,sorting,comparison-operators,Javascript,Arrays,Performance,Sorting,Comparison Operators,在Javascript中,有两种解决方案可以编写sort()函数来按升序对数字数组进行排序 var numbers = [2, 10, 2, 6, 4]; // first solution numbers.sort((a, b) => a - b); // [2, 2, 4, 6, 10] // second solution numbers.sort((a, b) => a > b); // [2, 2, 4, 6, 10] 使用哪个更好或更快?排序回调必须返回值0,而

在Javascript中,有两种解决方案可以编写
sort()
函数来按升序对数字数组进行排序

var numbers = [2, 10, 2, 6, 4];
// first solution
numbers.sort((a, b) => a - b); // [2, 2, 4, 6, 10]

// second solution
numbers.sort((a, b) => a > b); // [2, 2, 4, 6, 10]

使用哪个更好或更快?

排序回调必须返回值0,而不是布尔值。使用
是完全不正确的。它将如何影响排序算法的性能或正确性取决于实现(即,不同的引擎可能显示不同的结果)。

在C中,我们总是倾向于
a-b
而不是
a>b
,因为后者可能由于分支预测器中的故障而导致管道转储


不过,在Javascript中,您并没有将微优化到那个级别。把最清楚的写下来。更好的是,使用开箱即用的解决方案。

在性能方面,我做了一个片段,布尔运算符似乎更快


PD:使用Google Chrome Versionón 59.0.3071.115(Build of icial)(64位)

但使用>仍然可以得到想要的结果。怎么不正确?您将
a
的所有情况都声明为“相等”。您的比较函数是不一致的,即对于值
1,2
(“相等”)和
2,1
(“较大”)将给出不一致的结果。这可能会也可能不会抛弃排序算法,导致它进行正确答案可能会阻止的额外迭代。