js数组的sort排序的原理和应用

1、js sort()方法的应用:

首先:如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。

如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:

  • 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
  • 若 a 等于 b,则返回 0。
  • 若 a 大于 b,则返回一个大于 0 的值。

(来自 W3C);

然而:然而重点来了!!!

例1:

<script>  
  var numArr = new Array(12,23,1,4,23,34,2,5);  
  numArr.sort(function compare(a,b){return a-b;});  
  for (var i = 0; i<numArr.length; i++) {  
    document.write(numArr[i] +"<br>");  
  }  
</script>

这一段代码显示结果: 正序!1 ,2,4,5,12,23,23,34

例二:

<script>  
  var numArr = new Array(12,23,1,4,23,34,2,5);  
  numArr.sort(function compare(a,b){return b-a;});  
  for (var i = 0; i<numArr.length; i++) {  
    document.write(numArr[i] +"<br>");  
  }  
</script> 

这一段代码显示结果: 倒序!34,23,23,12,5,4,2,1

这说明正序倒序的结果和sort()方法函数中的参数位置有关。

2js sort()方法的原理:

冒泡排序法。

例:

var arrA = [6,2,4,3,5,1];
    arrA.sort();
这个排序这进行两两比较.
比如你这个数组按升序排列var arrA = [6,2,4,3,5,1];
第一次比较6,2
6比2大得到2,6
原数组变成[2,6,4,3,5,1]

第2次比较第2个和第3个数,6和4.
6比4大,得到4,6
结果[2,4,6,3,5,1]

第3次比较第3个和第4个数6和3.
得到[2,4,3,6,5,1]

第4次[2,4,3,5,6,1]
第5次[2,4,3,5,1,6]
第一轮完毕

第二轮
第6次,2比4小,不变[2,4,3,5,1,6]
第7次[2,3,4,5,1,6]
第8次4比5小,不变[2,3,4,5,1,6]
第9次[2,3,4,1,5,6]
第三轮
第10次 2比3小,不变[2,3,4,1,5,6]
第11次 3比4小,不变[2,3,4,1,5,6]
第12次 [2,3,1,4,5,6]
第4轮
第13次 2比3小,不变[2,3,1,4,5,6]
第14次 [2,1,3,4,5,6]

第5轮
第15次[1,2,3,4,5,5]

同理可知后续过程。

3、随机排列的写法

arr.sort
	(
		function ()
		{
			return Math.random()<0.5?1:-1;
		}
	);

  

原文地址:https://www.cnblogs.com/kaixin3946/p/5638717.html