2
var numArray = [4,2,5,3];
numArray.sort(function(a,b){
  console.log("a:" + a + ", b:" + b);
  return a-b;
});

三个可能的返回数字是:<0(小于 0)、0 或 >0(大于 0):

 Less than 0: Sort "a" to be a lower index than "b"
 Zero: "a" and "b" should be considered equal, and no sorting performed.
 Greater than 0: Sort "b" to be a lower index than "a".

我在控制台上变得像这样

    甲:4,乙:2
    甲:4,乙:5
    甲:5,乙:3
    甲:2,乙:3
    甲:4,乙:3
    [2、3、4、5]

如上所示,我可以知道 a 和 b 的值是如何变化的吗?

在第一步中,a=4 和 b=2。在这种情况下,它将交换。然后数组变为[2,4,5,3];

在第二步中,a=4 和 b=5。在这种情况下,项目保持不变。然后数组变为[2,4,5,3];

第三步,a=5,b=3。在这种情况下,它将交换。然后数组变为[2,4,3,5];

到这一步为止一切正常。但在那之后,a 和 b 的值如何分别变为 2 和 3 > 而不是 2 和 4。

任何人都可以帮助我吗?

提前致谢

4

1 回答 1

2

不能保证 sort 方法使用简单的比较和交换算法。

您的浏览器更有可能使用诸如合并排序之类的东西,但具体算法将取决于浏览器和版本。

由于 Firefox 是开源的,您可以通过查看源代码来了解排序是如何实现的。它使用归并排序。

于 2012-06-29T06:11:48.427 回答