Cof*_*fee 10 javascript sorting algorithm
例如:
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
可以是任何东西?
谢谢!
回答你的问题的原因特别棘手,或者至少是详细的,因为没有规范说明浏览器应该实现哪种排序算法.因此,具体告诉您它在一个浏览器上的工作原理可能因浏览器不同而有所不同
它的要点是,你想把"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)
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)
归档时间: |
|
查看次数: |
5016 次 |
最近记录: |