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,26比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;
		}
	);

  

时间: 2024-08-05 03:59:49

js数组的sort排序的原理和应用的相关文章

js数组中sort排序注意的地方

var a=[1,2,3,4,5] function sum(a,b) { return a-b } //从小到大 function obj(a,b) { return b-a } //从大到小 a.sort(sum(a,b)) 调用sort方法后,数组本身会被改变,即影响原数组 默认情况下sort方法是按ascii字母顺序排序的,而非我们认为是按数字大小排序

js数组的sort排序详解

<body> <div> sort()对数组排序,不开辟新的内存,对原有数组元素进行调换 </div> <div id="showBox"> 1.简单数组简单排序 <script type="text/javascript"> var arrSimple=new Array(1,8,7,6); arrSimple.sort(); document.writeln(arrSimple.join()); <

js数组的sort排序详解(转载)

<body> <div> sort()对数组排序,不开辟新的内存,对原有数组元素进行调换 </div> <div id="showBox"> 1.简单数组简单排序 <script type="text/javascript"> var arrSimple=new Array(1,8,7,6); arrSimple.sort(); document.writeln(arrSimple.join()); <

js数组元素由小到大排序实例代码

js数组元素由小到大排序实例代码:有时候需要对数组中的数字进行排序,下面是一段将数组中数字由小到大排序的代码实例,希望能够帮到大家.实例代码如下: var arr=[2,55,55,1,75,3,9,35,70,166,432,678,32,98]; var len=arr.length; console.log(arr.join(",")); var newarr=[]; for(var i=0;i<len;i++){ newarr.push(Math.min.apply(nu

js 数组中sort方法存在的问题

chrome中测试sort方法 发现排序失效,查过资料发现,js数组的sort方法总会以第一个字符的ASCII值来进行比较排序 解决办法一:给sort方法指定一个比较函数作为参数,如下图 解决办法二:自己一个排序算法,自己造轮子 原文地址:https://www.cnblogs.com/xingguozhiming/p/8996700.html

JavaScript中数组Array.sort()排序方法详解

JavaScript中数组的sort()方法主要用于对数组的元素进行排序.其中,sort()方法有一个可选参数.但是,此参数必须是函数. 数组在调用sort()方法时,如果没有传参将按字母顺序(字符编码顺序)对数组中的元素进行排序,如果想按照其他标准进行排序,就需要进行传一个参数且为函数,该函数要比较两个值,并且会返回一个用于说明这两个值的相对顺序的数字. 1.对数字数组进行由小到大的顺序进行排序. 代码: var arr = [22,12,3,43,56,47,4]; arr.sort();

数组Array.sort()排序的方法

数组sort排序 sort比较次数,sort用法,sort常用 描述 方法sort()将在原数组上对数组元素进行排序,即排序时不创建新的数组副本.如果调用方法sort()时没有使用参数,将按字母顺序(更为精确地说,是按照字符编码的顺序)对数组中的元素进行排序.要实现这一点,首先应把数组的元素都转换成字符串(如果有必要的话),以便进行比较. 如果想按照别的顺序进行排序,就必须提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字.比较函数应该具有两个参数a和b,其返回值如下

模拟数组的sort排序方法

1 //为Object.prototype增加method方法,下次为对象添加方法不必键入prototype 2 Object.prototype.method=function(name,func){ 3 if(!this.prototype[name]){ 4 this.prototype[name]=func; 5 return func; 6 } 7 }; 8 //为数组添加rank排序方法 9 Array.method("rank",function(f){ 10 var t

js数组冒泡排序,快速排序的原理以及实现

实习了好久,大概用了半年ng2了吧,突然被同事问到js排序问题,一时竟有些懵逼,回来就温故一下,希望自己不忘初心,加油加油! 冒泡排序: 随便从数组中拿一位数和后一位比较,如果是想从小到大排序,那么就把小的那一位放到前面,大的放在后面,简单来说就是交换它们的位置,如此反复的交换位置就可以得到排序的效果. function sortA(arr){ for(var i=0;i<arr.length-1;i++){ for(var j=i+1;j<arr.length;j++){ //获取第一个值和