首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Javascript的sort()是如何工作的?

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

Stack Overflow用户
提问于 2009-09-29 20:21:06
回答 9查看 41.4K关注 0票数 117

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

代码语言:javascript
复制
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

那么这两组数字之间的关系是如何排序的呢?

请帮助一个苦苦挣扎的新手!

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2009-09-29 20:27:35

在排序过程中,数组排序回调函数是否被多次调用?

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

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

代码语言:javascript
复制
array.sort((a,b) => {
  console.log(`comparing ${a},${b}`);
  return a > b ? 1
               : a === b ? 0 
                         : -1;
});

编辑

这是我得到的输出:

代码语言:javascript
复制
25,8
25,7
8,7
25,41
票数 58
EN

Stack Overflow用户

发布于 2009-09-29 20:27:05

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

一些排序算法在已经排序的列表上表现不佳,因为这会导致它们进行比典型情况多得多的比较。其他人可以很好地处理预先排序的列表,但在其他情况下,他们可能会被“欺骗”而表现不佳。

有许多常用的排序算法,因为没有一种算法是所有用途的完美算法。最常用于泛型排序的两个是Quicksortmerge sort。快速排序通常是两种排序中较快的一种,但合并排序有一些很好的属性,可以使其成为更好的整体选择。合并排序是stable,而快速排序不是。这两种算法都是可并行化的,但合并排序的工作方式使并行实现更有效率,其他条件相同。

您的特定JavaScript解释器可能会使用这些算法中的一种,或者完全使用其他算法。符合标准的实现必须使用ECMAScript标准does not specify which algorithm。它甚至明确地否认了稳定的必要性。

票数 48
EN

Stack Overflow用户

发布于 2009-09-29 20:32:48

比较成对的值,一次比较一对。所比较的对是实现细节--不要假设它们在每个浏览器上都是相同的。回调可以是任何东西(因此您可以对字符串或罗马数字进行排序,或者其他任何可以得到返回1,0,-1的函数的东西)。

关于JavaScript的排序,需要记住的一件事是它不能保证是稳定的。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1494713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档