原生js数组排序

原生js数组排序原生js数组排序js排序以正序为例(即由小到大)vararr=[0,2,1,4,3,9,6,5,7,8];//未排序的数组varsortArr=null;//排序后得到的数组1sort排序sortArr=arr.sort(function(a,b){ returna-b})sort是es3增加的数组方法,大家可以放心使用(支持到ie…

大家好,又见面了,我是你们的朋友全栈君。

原生js数组排序

js 排序 以正序为例(即由小到大)

var arr = [0,2,1,4,3,9,6,5,7,8];  // 未排序的数组
var sortArr = null;  // 排序后得到的数组

1 sort排序

sortArr = arr.sort(function (a,b) {
	return a - b 
})

sort是es3增加的数组方法,大家可以放心使用(支持到ie6),但是数组在原数组上进行排序,不生成副本。这个时候我们的sortArr === arr是同一个数组

2 普通for循环排序

function sort (arr) {
	var newArr = [arr[0]];
	var nl = newArr.length;
	var ol = arr.length;
	for (var i = 1; i <= ol - 1; i++) {
		nl = newArr.length;
		for (var j = 0;  j <= nl - 1; j++) {
			if(newArr[j]>=arr[i]){
				newArr.splice(j, 0, arr[i]);
				break;
			}else if(j == nl - 1){
				newArr.push(arr[i])
			}
		}
	}
	return newArr;
}
sortArr = sort(arr);

*此方法会重新生成一个数组,并对其进行排序,但是缺点是执行效率低,当数据量较大时,*强烈不建议使用此方法

3 二分法排序

function twoSort (arr) {
	var len = arr.length;
	var left = 0, right = 0, point = 0;   //定义三个标记位,point就是最中间的位置
	var nArr = [];
	nArr[0] = arr[0];         //定义一个数组后,把arr中第一个数先赋给nArr
	for(var i=1; i<len; i++){
		left = 0;
		var nLen = nArr.length;
		right = nLen;
		for(var j=0; j<nLen; j++){
			point = Math.floor((left + right)/2);   //取整
				if(nArr[point] < arr[i]){
					left = point + 1;          //注意必须加1
				}else{
					right = point;
				}
			if(right == left){        //如果right和left相等就表示找到了插入的位置 ,插入后,跳出循环
				nArr.splice(left,0,arr[i]);
				break;
			}
		}
	}
	return nArr;
}
sortArr = sort(arr);

此方法会重新生成一个数组,并对其进行排序,并且执行效率较高,但是代码量比较大,对于我们这种爱研(de)究(se)的同学来说是不会满足于此的。

4 递归二分法排序的两种写法

法1

function recursiveSort1(arr) {
	if (arr.length <= 1) { return arr; }//如果输入数组长度小于等于1,直接返回数组。这也是递归算法的终结部分
		var base = Math.floor(arr.length / 2);//找到中间的基准元素位置
		var baseEle = arr.splice(base, 1)[0];//把基准元素从arr中摘除
		var left = [];
		var right = [];
	for (var i = 0; i < arr.length; i++) {
		if (arr[i] < baseEle) {
			left.push(arr[i]);
		} else {
			right.push(arr[i]);
		}
	}
	return recursiveSort(left).concat([baseEle ], recursiveSort(right));
	//返回递归左右两个部分concat中间元素,这就是结果
};
sortArr = recursiveSort1(arr);

法2

function recursiveSort2(arr) {
	if (arr.length <= 1) { return arr; }//如果输入数组长度小于等于1,直接返回数组。这也是递归算法的终结部分
		var base = Math.floor(arr.length / 2);//找到中间的基准元素位置
		var baseEle = arr[base];//把基准元素从arr中取出
		var left = [];
		var right = [];
	for (var i = 0; i < arr.length; i++) {
		if (i === base) continue;
		if (arr[i] < baseEle) {
			left.push(arr[i]);
		} else {
			right.push(arr[i]);
		}
	}
	return recursiveSort(left).concat([baseEle ], recursiveSort(right));
	//返回递归左右两个部分concat中间元素,这就是结果
};
sortArr = recursiveSort1(arr);

这两种方法会重新生成一个数组,并对其进行排序,并且执行效率较高,代码量比较小。但是法1会改变原数组(剔除原数组中间的一个元素),法2会保留原数组

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/131369.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月12日 下午2:16
下一篇 2022年6月12日 下午2:16


相关推荐

  • JS合并数组并排列

    JS合并数组并排列题目 请把两个数组 A1 A2 B1 B2 C1 C2 D1 D2 和 A B C D 合并为 A1 A2 A B1 B2 B C1 C2 C D1 D2 D letarr1 A1 A2 B1 B2

    2025年12月5日
    5
  • python lambda表达式举例_Python中lambda表达式[通俗易懂]

    python lambda表达式举例_Python中lambda表达式[通俗易懂]一、lambda表达式形式lambda后面跟一个或多个参数,紧跟一个冒号,以后是一个表达式。冒号前是参数,冒号后是返回值。lambda是一个表达式而不是一个语句。lambda表达式可以出现在Python语法不允许def出现的地方。lambda表达式返回一个值。二、与def的区别lambda用来编写简单的函数,不会再重复利用的函数。而def用来处理强大的任务。三、举例1、fun=lambdax…

    2022年10月10日
    5
  • (三)hadoop系列之__CRT(SecureCRTPortable)的使用

    (三)hadoop系列之__CRT(SecureCRTPortable)的使用  SecureCRTPortable属于终端仿真程序,支持SSH(查看此处http://blog.csdn.net/macrossdzh/article/details/5691924)协议。利用CRT可以很方便操作虚拟机终端。进入正题……1.首先,下载SecureCRTPortable软件。2.直接执行SecureCRTPortable.exe文件即可。3.执…

    2022年5月23日
    36
  • docker部署web项目_docker构建高可用web应用

    docker部署web项目_docker构建高可用web应用前言前面我们运行的容器并没有一些什么特别的用处。接下来让我们尝试使用docker构建一个web应用程序。我们将在docker容器中运行一个PythonFlask应用来运行一个web

    2022年7月30日
    6
  • jquery unbind_java主函数

    jquery unbind_java主函数PHPuniqid()函数uniqid()函数基于以微秒计的当前时间,生成一个唯一的ID。PHPPHPuniqid()函数uniqid()函数基于以微秒计的当前时间,生成一个唯一的ID。注释:由于基于系统时间,通过该函数生成的ID不是最佳的。如需生成绝对唯一的ID,请使用md5()函数(请在字符串函数参考中查找)。echouniqid();?>本例产生32个字符的独…

    2025年8月13日
    3
  • Ajax 技术

    Ajax 技术Ajax

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号