说到快速排序,我们第一想到的一定是sort方法,但是,不要着急,在使用之前我们必须要了解sort方法到底是如何排序的。
例如: 我们对数组进行排序,我想我们的答案都是正确的。
let arr = [1,3,5,2,4]
arr.sort() // [1, 2, 3, 4, 5]
再看下面这一组
let arr = [5,22,8,36,1]
console.log(arr.sort()) //[1, 22, 36, 5, 8]
结果是不是和你预期的不一样呢,知其然,不知其所以然,所以今天刨根问底,一探究竟
为什么第二组排序会出现问题呢,原因如下:
1.js中的sort方法并不是按照我们数学中的1-10...,这样去依次排序的。
2.sort(默认升序),它会将排序的元素转为字符串,所以第二组的数组转变为 ['5','25','8','36','1'],
接下对应的字符串在计算机里找对应的Unicode码。
3.Unicode编码,数字的排序方式是 先整理1开头的,然后整理2开头的,依次,所以第二组数组就会出现问题。
那么有没有解决方案呢,当然有了,
1.定义一个比较器
function(x,y) {return x-y} // 小于0,x移到y前面,大于0,移到y后面。等于0不变
let arr = [5,22,8,36,1]
arr.sort(function(x,y) {return x-y})// [1, 5, 8, 22, 36]
你学会了吗,每天进步一小点,加油!!!