js中的四种常用数组排序方法(冒泡、选择、插入、快排)及sort排序
1.冒泡排序
原理:
- 比较两个相邻的元素,如果第一个比第二个大,就交换他们的位置
- 对所有的元素重复以上步骤,直至排序完成
var arr = [3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];
document.body.innerHTML += `排序前:${arr}<br /><hr>`;
function arraySort(arr){for(var i=0;i<arr.length;i++){for(var j=0;j<arr.length-1;j++){if(arr[j]>arr[i]){var temp=arr[i];arr[i]=arr[j];arr[j]=temp;}}}return arr;
}
document.body.innerHTML += `排序后:${arraySort(arr)}<br />`;
动图演示
2.选择排序
原理:
- 在未排序序列中找到最小元素,存放到排序序列的起始位置
- 从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾
- 以此类推,直到所有元素均排序完毕
var arr = [3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];
document.body.innerHTML += `排序前:${arr}<br /><hr>`;
function arraySort(arr) {var len = arr.length;var minIndex, temp;for(var i = 0; i < len - 1; i++) {minIndex = i;for(var j = i + 1; j < len; j++) {if(arr[j] < arr[minIndex]) { // 找出最小的数minIndex = j;}}temp = arr[i];arr[i] = arr[minIndex];arr[minIndex] = temp;}return arr;
}
document.body.innerHTML += `排序后:${arraySort(arr)}<br />`;
动图演示
3.插入排序
原理:
- 从第一个元素开始,该元素可以认为已经被排序
- 取出下一个元素,在已经排序的元素序列中从后向前扫描
- 如果该元素(已排序)大于新元素,将该元素移到下一位置
- 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
- 将新元素插入到该位置后
- 重复步骤2~5直至排序完成
var arr = [3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];
document.body.innerHTML += `排序前:${arr}<br /><hr>`;
function arraySort(arr){if (arr.length < 1) {return arr;}var index = Math.floor(arr.length/2);var left = [];var right = [];var brr = arr.splice(index,1)[0];for(var i=0;i<arr.length;i++){if(brr > arr[i]){left.push(arr[i]);}else if(brr < arr[i]){right.push(arr[i]);}}return arraySort(left).concat(brr, arraySort(right))
}
document.body.innerHTML += `排序后:${arraySort(arr)}<br />`;
动图演示
4.快速排序
原理:
- 从数列中挑出一个元素,称为 “基准”(pivot)
- 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作
- 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序
var arr = [3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];
document.body.innerHTML += `排序前:${arr}<br /><hr>`;
function arraySort(arr){if (arr.length < 1) {return arr;}var index = Math.floor(arr.length/2);var left = [];var right = [];var brr = arr.splice(index,1)[0];for(var i=0;i<arr.length;i++){if(brr > arr[i]){left.push(arr[i]);}else if(brr < arr[i]){right.push(arr[i]);}}return arraySort(left).concat(brr, arraySort(right))
}
document.body.innerHTML += `排序后:${arraySort(arr)}<br />`;
动图演示
5.真香排序法:sort()
sort是一个方法,该方法内部对该数组对象进行一些操作,又返回来一个数组,不传参数的话排序默认根据字符串的Unicode排序。
var arr = [3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];
arr = arr.sort();
console.log(arr.toString());
//输出结果为:15,19,2,26,27,3,36,38,4,44,46,47,48,5,50
可以看到上面的输出结果并没有按照大小进行排列,所以我们往往是通过给sort传入一个函数来做参数。
传递参数这种情况所传的参数必须为一个函数,该函数对a,b两个参数进行比较,返回一个结果:
- a 大于 b 返回一个大于0的值,a在b位置的后面
- a 等于 b 返回一个等于0的值,a、b位置不变
- a 小于 b 返回一个小于0的值,a在b位置的前面
var arr = [3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];
function arraySort(a,b){return a - b;
}
arr = arr.sort(arraySort);
console.log(arr.toString());
//输出结果为:2,3,4,5,15,19,26,27,36,38,44,46,47,48,50
当函数里返回a-b的时候,是升序排列,再看以下降序
var arr = [3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];
function arraySort(a,b){return b - a;
}
arr = arr.sort(arraySort);
console.log(arr.toString());
//输出结果为:50,48,47,46,44,38,36,27,26,19,15,5,4,3,2
sort对于对象的排序处理:
var arr = [{name:"张十八", age: 18},{name:"张三岁", age: 3},{name:"张十六", age: 16},{name:"张九十", age: 90},{name:"张小七", age: 7},{name:"张六六", age: 66}
];
function arraySort(arr){return function(a,b){return a[arr] - b[arr];}
}
arr = arr.sort(arraySort('age'));
console.log(arr);
输出结果为:
js中的四种常用数组排序方法(冒泡、选择、插入、快排)及sort排序相关推荐
- 后台CS代码中创建四种常用的SL动画效果
http://www.cnblogs.com/chengxingliang/archive/2011/03/07/1974436.html后台CS代码中创建四种常用的动画效果[附带源码实例] 转载于: ...
- 3d游戏建模基础教程:3D建模应用领域和四种常用建模方法
3D建模应用领域 影视动画表现 电影行业将它们用于活动的任务.物体以及现实电影:视频游戏产业将它们作为计算机与视频游戏中的资源,通过设计稿,建模,最终完成. 游戏美术表现 多用于游戏类建模,包括:角色 ...
- 盘点自动化设备中的四种常用模组
自动化设备在行业中已经逐渐取代人工了,而作为自动化必备传动配件的直线模组在市场上的需求量也越来越大.直线模组的种类也越来越多样化,但是常用的直线模组其实就四种,分别是滚珠丝杆模组.同步带模组.齿轮齿条 ...
- js中的几种跨域方法
js跨域指的是通过js在不同域之间进行数据传输或通讯,例如ajax通信技术,或者通过js获取页面中iframe的数据.只要有任意一个不同,则协议.域名.端口中有任意一个不同,则彼此成为不同的域. 请注 ...
- python pyinstaller打包程序太大_Pyinstaller打包生成exe文件过大,四种常用处理方法集锦---嵌入式Python-02...
上篇讲到 pyinstaller打包exe太大的问题 那既然pyinstaller这么麻(nan)烦(yong) 那为什么不找一种方法代替它呢? 经过多方面打听,一位道上的盆友告诉了我一个惊天大秘密 ...
- 《『EcmaScript』之理顺Js中的四种继承
文章目录 一.开篇前谈 二.什么是继承 三.实现继承 1. 原型链继承 2. 借用构造器继承 3. 组合继承 4. 寄生组合继承 四.总结 一.开篇前谈 这一段时间不小心中招
- node.js取参四种方法req.body,req.params,req.param,req.body
node.js取参四种方法req.body,req.params,req.param,req.body 参考:https://my.oschina.net/u/2519530/blog/535309 ...
- 计算机中十二种常用密码的破解方法(转)
计算机中十二种常用密码的破解方法(转)[@more@] 在日常操作中,我们经常要输入各种各样的密码,例如开机时要输入密码,QQ时也要先输入密码,假如你忘记了这些密码,就有可能用不了机器.打不开文件.不 ...
- js中string字符串转换为JSON对象 - 方法大全(4种)
js中string字符串转换为JSON对象 - 方法大全(4种) jQuery插件支持的转换方式: 示例: //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对 ...
- js中的4种函数调用模式:函数调用、方法调用、构造器调用、间接调用
全栈工程师开发手册 (作者:栾鹏) js系列教程4-函数.函数参数教程全解 js中的4种函数调用模式 javascript一共有4种调用模式:函数调用模式.方法调用模式.构造器调用模式和间接调用模式. ...
最新文章
- 【jsp】通过get和post传值的区别
- php返回结果判断,老司机在判断返回结果时翻了个身(ThinkPHP)
- (转)国外软件外包项目网站(适用软件兼职)
- BLE 绑定流程(转自襄坤在线)
- Pandas的学习(1.pandas的介绍以及pandas中的Series的创建)
- TensorFlow学习笔记(二十四)自制TFRecord数据集 读取、显示及代码详解
- python面向对象语言_Python语言基础之——面向对象编程
- birt报表表格边框_Python 快速设置 Excel 表格边框
- Cortex M3 NVIC与中断控制
- POJ 1002 487-3279
- springboot集成Spring Security oauth2(八)
- 大学计算机实验报告2,大学计算机基础实验报告2.doc
- 拓端tecdat|python用线性回归预测股票价格
- 二次方程c语言计算器,解方程计算器
- java中handler机制_自己动手撸一个Handler,让你彻底搞懂Handler机制,揍吻你服不服?...
- 如何判断是pc端还是移动端
- 如何选择合适的工业相机
- VBS让室友成为你儿子
- 计算机无法接入工作网络,局域网中电脑无法连接网络怎么处理
- 2022年10大让人惊艳的数据可视化工具,BAT和字节都在用
热门文章
- 公司网站被跳转到其他网站被提示该站点可能受到黑客攻击,部分页面已被非法篡改
- 一位清华贫困生的“树洞”刷屏!“我想照亮哪怕其他一个人也好”...
- UE4基础:自定义单例类(Singleton Class)
- 中国标准时间、标准时间、时间戳时间格式转换
- CAR-T研究最新进展(2022年10月第二期)
- 用户流失、股价重挫的Netflix究竟发生了什么?
- 网线交叉网线线序接法
- 【Python-神经网络】
- 【转载】Saas模式
- 怎样做产品能甩同行一个时代?李彦宏说AI思维助你降维攻击