原生JS数组的排序

1、Sort排序

功能:对数组中的元素进行排序,默认是升序。

var arr1 = [3,4,6,1,5];
console.log(arr1.sort());    //[1, 3, 4, 5, 6]

在排序前,会先调用数组的toString方法,将每个元素都转成字符后,再进行排序,此时会按照字符串的排序方式排序(逐位比较,得到结果停止)。

var arr2 = [2,14,101,1178,1294];
console.log(arr2.sort());            //[101, 1178, 1294, 14, 2]此时的排序

如果需要按照数值排序,需要传参。sort(callback),callback为回调函数,该函数应该具有两个参数,比较这两个参数,然后返回一个用于说明这两个值的相对顺序的数字(a-b)。其返回值如下:
若 a 小于 b,返回一个小于 0 的值。
若 a 等于 b,则返回 0。
若 a 大于 b,则返回一个大于 0 的值。

var arr3 = [102,1111,21,9,28];
arr3.sort(function(a,b){
	return a - b;
})
console.log(arr3);                  //[9, 21, 28, 102, 1111]此时的排序

2、冒泡排序

排序规则两两比较,大的排后面

var arr = [23,12,1234,188,9];
//分析:既然是两两比较,那就用数组的索引罗列出排序的过程
	//第一轮	0-1 1-2 2-3 3-4    //这里必然得到最大值,放在最后 
	//第二轮	0-1 1-2 2-3        //得到第二大的值,放在倒数第二位
	//第三轮	0-1 1-2            //以此类推
	//第四轮	0-1
	//以上的结构可以看出,这是多行多列,利用循环嵌套来解决(外层循环控制行,内层循环控制列)
for(var a=0;a<arr.length-1;a++){          //确定行
	for(var b=0;b<arr.length-1;b++){      //确定列
		if(arr[b] > arr[b+1]){            //判断大小,交换位置
			var ls = arr[b];
			arr[b] = arr[b+1];
			arr[b+1] = ls;
		}
	}
}
console.log(arr);            //[9, 12, 23, 188, 1234]此时的结果

3、选择排序

排序规则每次拿出一个数据和其他所有数据相比较,得到大的或小的与初始位置做交换。

var arr = [123,132,12,8,6,1111];
// 分析:先拿出第一位与余下所有的数据做比较,用数组的索引罗列排序的过程
// 	第一轮	0-1 0-2 0-3 0-4 0-5    //必然得到一个最小值,放在第一位
// 	第二轮	1-2 1-3 1-4 1-5        //得到第二小的值,放在第二位
// 	第三轮	2-3 2-4 2-5            //以此类推
// 	第四轮	3-4 3-5
// 	第五轮	4-5
// 	以上所得,多行多列,循环的嵌套;
for(var a=0;a<arr.length-1;a++){
	var smallNum = arr[a];              //假设一个最小值
	var smallNumIndex = a;              //把假设的最小值位置存出来
	for(var b=a+1;b<arr.length;b++){    //第一位做完比较不再参与,所以a+1
		if(smallNum > arr[b]){          //判断正确性,不正确,拿到比假设的还小的值
			smallNum = arr[b];
			smallNumIndex = b;
		}
	}
	var ls = arr[a];              //内循环结束后必然得到一个最小值,交换位置
	arr[a] = smallNum;
	arr[smallNumIndex] = ls;	  //第一位原本的数据,放在原本最小值的位置
}
console.log(arr);                 //[6, 8, 12, 123, 132, 1111]此时的结果
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值