Javascript的sort()是如何工作的?

下面的代码如何按照数字顺序sorting这个数组?

var array=[25, 8, 7, 41] array.sort(function(a,b) { return a - b}) 

我知道如果计算的结果是…

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

在sorting的过程中,是多次调用数组sortingcallback函数吗?

如果是这样,我想知道每次都传入哪个数字。 我假设它首先采用了“25”(a)和“8”(b),接着是“7”(a)和“41”(b)

25(a) – 8(b)= 17(大于零,所以将“b”归为低于“a”的索引):8,25

7(a) – 41(b)= -34(小于零,所以sorting“a”为低于“b”的索引:7,41

这两组数字是如何相互sorting的?

请帮助一个挣扎的新手!

在sorting的过程中,是多次调用数组sortingcallback函数吗?

如果是这样,我想知道每次都传入哪个数字

你可以找出你的自我:

 array.sort(function(a,b) { console.log( "comparing " + a + ", " + b ); return a - b }); 

编辑

这是我得到的输出:

 25,8 25,7 8,7 25,41 

JavaScript解释器有一些内置的sortingalgorithm实现。 它在sorting操作中调用比较函数一些次数。 比较函数调用的次数取决于特定algorithm,要sorting的数据以及sorting之前的顺序。

某些sortingalgorithm在已经sorting的列表上performance不佳,因为这会使它们做出比典型情况更多的比较。 其他人能够很好地处理预先sorting的清单,但是在其他情况下,他们可以被“欺骗”成绩不佳。

有许多常用的sortingalgorithm,因为没有单一的algorithm是完美的所有目的。 通用sorting中最常用的两个是Quicksort和合并sorting 。 Quicksort往往是两者中较快的,但合并sorting有一些很好的属性,可以使它成为一个更好的整体select。 合并sorting是稳定的 ,而Quicksort不是。 两种algorithm都是可并行化的,但合并分类的方式使并行实现更有效率,其他所有条件都是平等的。

您的特定JavaScript解释器可能会使用其中一种algorithm或其他的algorithm。 ECMAScript标准没有指定符合实现必须使用的algorithm 。 它甚至明确地否定稳定的需要。

成对的价值进行比较,一次一对。 被比较的对是一个实现细节 – 不要以为每个浏览器都是一样的。 callback可以是任何东西(所以你可以sortingstring或罗马数字或任何其他地方,你可以拿出一个函数返回1,0,-1)。

有一点需要注意,JavaScript的sorting是不能保证稳定。

在sorting的过程中,是多次调用数组sortingcallback函数吗?

是的,就是这样。 callback函数用于根据需要比较数组中的元素对,以确定它们应该处于什么样的顺序。比较函数的实现在处理数字sorting时不是非典型的。 在规范或其他更可读的网站上的细节。

在sorting的过程中,是多次调用数组sortingcallback函数吗?

由于这是一个比较sorting,给定N个项目,callback函数应该平均调用(N * Lg N)次来进行像Quicksort这样的快速sorting。 如果使用的algorithm类似Bubble Sort ,那么平均(N * N)次调用callback函数。

用于比较sorting的最小调用次数是(N-1),仅用于检测已经sorting的列表(即,如果不发生掉期,则在Bubble Sort中提早出现)。