下面的代码如何按数字顺序对此数组进行排序?
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
那么这两组数字之间的关系是如何排序的呢?
请帮助一个苦苦挣扎的新手!
发布于 2009-09-29 20:27:35
在排序过程中,数组排序回调函数是否被多次调用?
是
如果是这样,我想知道每次传递给函数的是哪两个数字
你可以通过以下方式找到你自己:
array.sort((a,b) => {
console.log(`comparing ${a},${b}`);
return a > b ? 1
: a === b ? 0
: -1;
});
编辑
这是我得到的输出:
25,8
25,7
8,7
25,41
发布于 2009-09-29 20:27:05
JavaScript解释器中内置了某种sort algorithm实现。在排序操作期间,它会多次调用比较函数。调用比较函数的次数取决于特定的算法、要排序的数据以及它在排序之前的顺序。
一些排序算法在已经排序的列表上表现不佳,因为这会导致它们进行比典型情况多得多的比较。其他人可以很好地处理预先排序的列表,但在其他情况下,他们可能会被“欺骗”而表现不佳。
有许多常用的排序算法,因为没有一种算法是所有用途的完美算法。最常用于泛型排序的两个是Quicksort和merge sort。快速排序通常是两种排序中较快的一种,但合并排序有一些很好的属性,可以使其成为更好的整体选择。合并排序是stable,而快速排序不是。这两种算法都是可并行化的,但合并排序的工作方式使并行实现更有效率,其他条件相同。
您的特定JavaScript解释器可能会使用这些算法中的一种,或者完全使用其他算法。符合标准的实现必须使用ECMAScript标准does not specify which algorithm。它甚至明确地否认了稳定的必要性。
发布于 2009-09-29 20:32:48
比较成对的值,一次比较一对。所比较的对是实现细节--不要假设它们在每个浏览器上都是相同的。回调可以是任何东西(因此您可以对字符串或罗马数字进行排序,或者其他任何可以得到返回1,0,-1的函数的东西)。
关于JavaScript的排序,需要记住的一件事是它不能保证是稳定的。
https://stackoverflow.com/questions/1494713
复制相似问题