使用算术运算符与比较运算符对数字数组进行排序
Sort array of numbers with arithmetic operators vs 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]
哪个更好用或更快?
sort
回调必须 return 值 <0、0 或 >0,不是布尔值。使用 >
只是 不正确 。它将如何影响排序算法的性能或正确性取决于实现(即不同的引擎可能显示不同的结果)。
在 C 语言中,我们总是倾向于 a - b
而不是 a > b
,因为后者可能会由于分支预测器的故障而导致管道转储。
不过在 Javascript 中,您不会微优化到那个级别。写最清楚的。更好的是,使用开箱即用的解决方案。
在性能方面,我做了一个jsPerf片段,布尔运算符似乎更快。
PD:使用 Google Chrome 版本 59.0.3071.115(官方构建)(64 位)
在 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]
哪个更好用或更快?
sort
回调必须 return 值 <0、0 或 >0,不是布尔值。使用 >
只是 不正确 。它将如何影响排序算法的性能或正确性取决于实现(即不同的引擎可能显示不同的结果)。
在 C 语言中,我们总是倾向于 a - b
而不是 a > b
,因为后者可能会由于分支预测器的故障而导致管道转储。
不过在 Javascript 中,您不会微优化到那个级别。写最清楚的。更好的是,使用开箱即用的解决方案。
在性能方面,我做了一个jsPerf片段,布尔运算符似乎更快。
PD:使用 Google Chrome 版本 59.0.3071.115(官方构建)(64 位)