JavaScript排序功能如何工作(作为算法)?

Cof*_*fee 10 javascript sorting algorithm

采用参数的JavaScript 排序函数允许传递函数.

例如:

var myarray=[25, 8, 7, 41]
myarray.sort(function(a,b){return a - b}) //Array now becomes [7, 8, 25, 41]
Run Code Online (Sandbox Code Playgroud)

代码怎么样?

function(a,b){
    return a - b
}
Run Code Online (Sandbox Code Playgroud)

被解释为提升?它应该被分为三种情况,< 0,== 0,和> 0,但如何这有意义的时候a,并b可以是任何东西?

谢谢!

Gol*_*wby 6

回答你的问题的原因特别棘手,或者至少是详细的,因为没有规范说明浏览器应该实现哪种排序算法.因此,具体告诉您它在一个浏览器上的工作原理可能因浏览器不同而有所不同

它的要点是,你想把"a"和"b"视为任何两个值.如果您返回"a" - "b"的结果,那么您的排序按升序排列.如果你做"b" - "a",那么它按降序排列.

制作自己的排序函数的好处是,您可以在单独的函数中处理它们之后比较"​​a"和"b"的值.因此,假设您要按摄氏温度值排序,但您的数组仅在华氏温度下排序.你可以这样做:

.sort(function(a,b){ return to_fahrenheit(a) - to_fahrenheit(b);}
Run Code Online (Sandbox Code Playgroud)


Sag*_*jal 6

var myarray=[25, 8, 7, 41]
myarray.sort(function(a,b){return a - b}) //Array now becomes [7, 8, 25, 41]
Run Code Online (Sandbox Code Playgroud)

只需将其更改为

var myarray=[25, 8, 7, 41]
myarray.sort(function(a,b){console.log("comparing " + a + ", " + b);return a - b}) //Array now becomes [7, 8, 25, 41]
Run Code Online (Sandbox Code Playgroud)

在控制台日志中尝试上述代码后,您将看到以下结果

var myarray=[25, 8, 7, 41]
myarray.sort(function(a,b){return a - b}) //Array now becomes [7, 8, 25, 41]
Run Code Online (Sandbox Code Playgroud)

被解释为上升?应该将其分为三种情况:<0,== 0和> 0;但是当a和b可以是任何东西时,这有什么意义呢?

第一次比较:25,8

现在,让我们回答您对如何选择a,b值的疑问。当您运行代码时,您会看到第一个比较是在25,8之间进行的,如果结果为正,则意味着8较小。因此,它只是将其重新排序为8、25。

第二比较:25,7

在25和7之间进行下一个比较,这是因为如果结果为负,则第三个数字将放在25之后,并且将对这三个数字进行排序。

但是情况有所不同,现在结果再次成为正面。数组尚未重新排序

8, 7, 25
Run Code Online (Sandbox Code Playgroud)

之后,它将再次执行测试,直到发现条件为阳性。因此,现在它比较8、7,结果再次为负。

数组再次将自身重新排序为

7, 8, 25
Run Code Online (Sandbox Code Playgroud)

第三次比较:25,41

现在,在最后的比较中,结果为正,这意味着41大于25。

因此,数组将自身重新排序为

7,8,25,41
Run Code Online (Sandbox Code Playgroud)


sch*_*sch 5

该函数sortcompareFunction多次调用该函数并传递给项目ab它.这将发生多次,直到数组排序.

比较函数应该返回:

  • 0如果a == b;
  • 一个正数,如果a > b;
  • 负数如果b < a.

现在,让我们看一下代码中的函数,我们有a - b =:

  • 0如果a == b;
  • 一个正数,如果a > b;
  • 负数如果b < a.

因此它返回预期的结果,并且数组将被正确排序.

有关更多信息,请查看文档.