欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【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);

以下为输出结果:

【JavaScript】数组的sort方法排序原理详解

我们会发现该方法进行了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);