Javascript的sort()如何工作?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (28)

以下代码如何按照数字顺序对此数组进行排序?

 var array=[25, 8, 7, 41]

 array.sort(function(a,b) {
  return a - b})

我知道如果计算结果是...

小于0:“a”被排序为低于“b”的索引。 零: “a”和“b”被认为是相等的,不进行排序。 大于0: “b”被排序为低于“a”的索引。

排序过程中多次调用数组排序回调函数吗?

如果是这样,我想知道每次将哪两个数字传递给函数。我认为它首先采用了“25”(a)和“8”(b),接着是“7”(a)和“41”(b),因此:

25(a) - 8(b)= 17(大于零,因此将“b”归类为比“a”更低的索引):8,25

7(a) - 41(b)= -34(小于零,因此将“a”排序为低于“b”的索引:7,41

这两组数字如何相互排序?

提问于
用户回答回答于

排序过程中多次调用数组排序回调函数吗?

如果是这样,我想知道每次将哪两个数字传递给函数

你可以通过以下方式找到你的自我:

array.sort(function(a,b) {

  console.log( "comparing " + a + ",  " + b );
  return a - b

});

这是我得到的输出:

25,8
25,7
8,7
25,41
用户回答回答于

JavaScript解释器内置了某种排序算法实现。它在排序操作中调用比较函数一些次数。比较函数被调用的次数取决于特定算法,要排序的数据以及它在排序之前的顺序。

某些排序算法在已排序的列表上表现不佳,因为它使得它们比通常情况下进行更多的比较。其他人可以很好地处理预先排序的清单,但在其他情况下,他们可能会被“欺骗”成绩不佳。

有许多常用的排序算法,因为没有一种算法对于所有目的都是完美的。最常用于通用排序的两种是Quicksort和合并排序。快速排序通常是两者中较快的,但合并排序有一些很好的属性,可以使它成为更好的整体选择。合并排序是稳定的,而Quicksort则不是。两种算法都是可并行化的,但合并排序的工作方式使得并行实现更高效,其他方面均相同。

您的特定JavaScript解释器可能会使用其中一种算法或其他的算法。在ECMAScript的标准没有规定的算法一个符合标准的实现必须使用。它甚至明确表示不需要稳定。

扫码关注云+社区