javascript - JavaScript 排序函数如何工作(作为一种算法)?

标签 javascript algorithm sorting

<分区>

JavaScript sort function which takes a parameter允许一个人传递一个函数。

例如:

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

代码是怎么来的

function(a,b){
    return a - b
}

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

谢谢!

最佳答案

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

只需将其更改为

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]

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

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]

is interpreted to be ascending? It's supposed to be divided into three cases, <0 , ==0, and >0 ; but how does this make sense when a and b can be anything?

第一个比较:25,8

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

第二次比较:25,7

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

但情况不同,现在结果又是阳性。该数组还重新排序为

8, 7, 25

之后它再次执行测试,直到发现条件为阳性。所以现在它比较 8、7,结果还是负数。

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

7, 8, 25

第三个比较:25、41

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

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

7,8,25,41

关于javascript - JavaScript 排序函数如何工作(作为一种算法)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9831330/

相关文章:

multithreading - 按线程排序

javascript - 正则表达式要求不够严格

javascript - x++和++x有什么区别

javascript - jquery datatable 表工具导出到 Excel 未向我显示文件中的表数据

javascript - 使用 sort() 正确返回数组中的最大数字

c - 在没有任何临时变量的情况下在 O(n) 中排序

javascript - 根据多个文本框中的值进行过滤

algorithm - 感知器的遍数

python - 在 OpenCV python 中测量点到掩码的距离

algorithm - 二维快速k-最近邻搜索的数据结构和算法的合适选择