当前位置:  开发笔记 > 编程语言 > 正文

Javascript的sort()如何工作?

如何解决《Javascript的sort()如何工作?》经验,为你挑选了4个好方法。

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

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

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

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



1> OscarRyz..:

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

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

你可以找到自己:

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


而是将console.log改为firebug或html DIV元素的.innerHTML + ="比较"+ a +","+ b +"\n";
只是新ES6语法的注释:`array.sort((a,b)=> a - b);`是有效的语法
请记住,这是一个类似wiki的网站,我们可以编辑其他答案,使它们更好:)
@ShekharReddy仍然可以使用运算符进行比较.我已经更新了答案.

2> Warren Young..:

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

某些排序算法在已经排序的列表上表现不佳,因为它导致它们比典型情况下进行更多的比较.其他人可以很好地处理预先排序的列表,但是有其他情况可以被"欺骗"到表现不佳的情况.

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

您的特定JavaScript解释器可能会使用其中一种算法或完全不同的其他算法.在ECMAScript的标准没有规定的算法一个符合标准的实现必须使用.它甚至明确否定了稳定的必要性.


JavaScriptCore实际上使用AVL树进行排序,因为必须在面对修改被排序的数组的比较器函数时确定性地运行.

3> Nosredna..:

比较成对值,一次一对.被比较的对是一个实现细节 - 不要以为它们在每个浏览器上都是相同的.回调可以是任何内容(因此您可以对字符串或罗马数字或其他任何可以提供返回1,0,-1的函数进行排序).

使用JavaScript时要记住的一件事是它不能保证稳定.



4> T.J. Crowder..:

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

是的,就是这样.回调用于比较数组中的元素对,以确定它们应该处于什么顺序.在处理数字排序时,比较函数的实现不是非典型的.规范或其他一些更易读的网站上的详细信息.

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有