sort() 方法用于对数组的元素进行排序
sort可以传入参数,也可以不传参数,下面分别说明。
不带参数
<script type="text/javascript">
var arr = new Array(6)
arr[0] = "10"
arr[1] = "5"
arr[2] = "40"
arr[3] = "25"
arr[4] = "1000"
arr[5] = "1"
document.write(arr + "<br />")
document.write(arr.sort())
</script>```
此时的输出是按照字符串的字典顺序来排列,输出如下:
排序前:10,5,40,25,1000,1
排序后:1,10,1000,25,40,5
这种排序结果在很多情况下都不是最佳方案。那么,我们需要给sort方法传入一个比较函数作为参数。
***
#####比较函数作为参数
<script type="text/javascript">
function sortNumber(a,b){
return a - b
}
var arr = new Array(6)
arr[0] = "10"
arr[1] = "5"
arr[2] = "40"
arr[3] = "25"
arr[4] = "1000"
arr[5] = "1"
document.write(arr + "<br />")
document.write(arr.sort(sortNumber))
</script>
将比较函数作为参数传给sort()方法后,数值排序得到了我们想要的结果:
排序前:10,5,40,25,1000,1
排序后:1,5,10,25,40,1000
**sort()方法如何排序呢**,下面是我总结的流程,供参考:
1.sort方法将arr数组的值两两传入sortNumber函数,返回的值有3种情况:正数,负数,零。
2.若sort方法接收到正数返回值,则交换传入sortNumber的两个数字,即当传入的a>b,则交换a与b;若sort方法接收到负数返回值和0返回值,则不交换。
3.重复1和2,最终使数字按照从小到大的顺序排序。
**以上述代码为例,流程如下**:
1. 将a=10,b=5传入sortNumber,返回5,正数,则将10和5交换顺序,此时arr数组顺序为:5,10,40,25,1000,1
2. 将a=10,b=40传入sortNumber,返回-30,负数,不改变顺序。此时arr数组顺序仍为:5,10,40,25,1000,1
3. 将a=40,b=25传入,返回15,正数,交换顺序,此时arr数组顺序:5,10,25,40,1000,1
4. 将a=40,b=1000传入,返回负数,不改变顺序,此时arr数组顺序:5,10,25,40,1000,1
5. 将a=1000,b=1传入,返回正数,交换,此时arr数组顺序:5,10,25,40,1,1000
此时,最大的元素被排到最后面了。是不是觉得很熟悉,没错,这就是冒泡算法的第一阶段,接下来,sort会接着将5,10传入sortNumber,进行第二阶段的排序。因此我们可以总结出,sort(sortNumber)里面自动进行的就是**冒泡排序法**。
**举一反三**,如果我们给sort()方法参数传1,即sort(1),那么结果就是数组项顺序反转,和reverse()方法功能一样。