【JavaScript】数组的sort方法排序原理详解
程序员文章站
2022-07-11 14:51:32
...
js数组方法中的sort方法是很实用排序方法,可以对数组进行快速的正序排序,倒叙排序,或者是自定义排序。它的使用方法在很多文档中都可以查到,这里主要讲sort的原理。【JavaScript】巧妙使用数组sort排序方法
var array = [12,10,7,5,2];
array.sort(function(a,b){
return a-b;
});
console.log(array) //[2,5,7,10,12]
这里进行了正序排序,看似只是一句简单的return a-b , 其实该方法进行了多次运算。
var array = [12,10,7,5,2];
array.sort(function(a,b){
var arr = a-b;
console.log(a+'-'+ b + '=' +arr); //这里对a-b进行了输出
return arr;
});
console.log(array);
以下为输出结果:
我们会发现该方法进行了10次运算。这其实应用到了冒泡排序,我们一步步来分析他的排序过程
第一步:12-10 =2; 这里return的值是2,为正数。说明12大于10,所以10被提前了,该数组变为[10,12,7,5,2]
第二步 : 12-7= 5; 这里说明12大于7,7又被提前到了12的前面。 这时该数组变为[10,7,12,5,2]
第三步:因为10跟7都小于2,程序无法判断7 跟 10谁大谁小,于是10跟7也进行了次比较。这时数组变为[7,10,12,5,2]
第四步 : 12继续和后面的值进行比较。发现12大于5,然后又把5提前到了12的前面。 数组变为[7,10,5,12,2]
第五步、第六步,分别是10跟7 和 5进行比较。 数组变为[5,7,10,12,2]
第七步:12继续和后面的值进行比较。12大于2,于是数组变为[5,7,10,2,12]
第八步、第九步、第十部分别就是对 10、7、5进行比较了。最终得出[2,5,7,10,12]
根据这运算过程我们可以自己写一个排序的方法:
var array = [12,10,7,5,2];
function sort(arr){
var smallOne;
for(var i = 0; i<arr.length; i++){
for(var j =0; j<arr.length-i; j++){
if( arr[j] - arr[j+1] > 0 ){
smallOne = arr[j+1];
arr[j+1] = arr[j];
arr[j] = smallOne;
}
}
}
}
sort(array);
console.log(array);
推荐阅读
-
详解JavaScript数组过滤相同元素的5种方法
-
详解JavaScript中数组和字符串的lastIndexOf()方法使用
-
Javascript数组系列四之数组的转换与排序Sort方法
-
JavaScript中十种一步拷贝数组的方法实例详解
-
图文详解Heap Sort堆排序算法及JavaScript的代码实现
-
JavaScript中数组Array.sort()排序方法详解
-
详解数组Array.sort()排序的方法
-
php通过sort()函数给数组排序的方法
-
JavaScript遍历数组的三种方法map、forEach与filter实例详解
-
JavaScript数组排序reverse()和sort()方法详解