JavaScript实现插入排序
来源:互联网 发布:财经数据编辑 编辑:程序博客网 时间:2024/06/05 02:27
一、插入排序简介:
想象我们斗地主,摸排阶段,手里的牌都按照从小到大排序。如果每摸一张牌,我们就把他插入合适的位置,使得它比后面位置的牌小,比前面位置的牌大或者相等。
类似这样的一种排序方法就是插入排序:
在一个数组a中,我们要实现升序排序,假设我们前面已经对a[0]到a[k]排好序,现在需要将a[k+1]的值放入合适的位置。
(为简便,此处不讨论k的取值范围,只是用它代表数组的某个位置)
1、首先,我们将a[k+1]的值与a[k]比较,如果小于a[k]就交换两者的值,相等或者大于都不需要交换。假设交换了,那么现在a[k]存放的是原先a[k+1]的值,新的a[k]的值有可能比前面位置的值小,故又需要再次对a[k]与a[k-1]进行比较,以此类推。直到发现某个位置a[p](p是0到k之间数)的值已经不比a[p-1]的值小,比较结束,a[k+1]的值已经放入合适的位置a[p]。或者a[k+1]的值比前面的值都小,一步步交换之后a[0]存放了原先a[k+1]的值,那么也结束。现在a[0]到a[k+1]是一个有序数组。
2、对a[k+1]之后a[k+2]到a[a.length-1]的每一个元素都依次进行相同操作,最终得到一个有序数组。
二、JavaScript实现插入排序
function insertion_sort(arr) { var temp; for (var i = 1; i < arr.length; i++) { for (var j = i-1; j >=0; j--) { if (arr[j+1]<arr[j]) { temp=arr[j+1]; arr[j+1]=arr[j]; arr[j]=temp; }else if (arr[j+1]>=arr[j]) { break; } } } return arr; } var a=[11,2,3,445,7,32,71,8,94]; console.log(insertion_sort(a)); var b=[94,11]; console.log(insertion_sort(b));
说明:
1、一旦发现arr[j+1]的值不比前面的值小,就可以结束内层循环了,break实现这一功能;
2、内层循环用arr[j+1]的原因:初始时a[j](即a[i-1])代表a[i]前一个位置,进入循环后,a[j+1]就表示了a[i]的位置,实现了a[i]和a[i-1]的第一次比较;随着j第一次自减,实际上比较了a[i-1]和a[i-2];依次类推。如果将arr[j+1]改成a[i]是不行的,因为没有实现位置的移动。
- JavaScript实现插入排序
- 【Javascript】实现快速,选择,冒泡,插入排序
- JavaScript实现冒泡排序、快速排序、插入排序
- 用JavaScript实现十大经典排序算法--插入排序
- 插入排序javascript
- 学习笔记:插入排序的C++、JavaScript、Java实现
- (二)c++和JavaScript实现插入排序
- Javascript实现三种排序:冒泡排序、选择排序、插入排序
- 插入排序--直接插入排序[Java实现]
- 插入排序--折半插入排序[Java实现]
- 插入排序----直接插入排序----java实现
- 单链表实现插入排序
- 插入排序 实现
- java实现插入排序
- 插入排序的实现
- 实现单链表插入排序
- java实现插入排序
- java实现插入排序
- Spring boot使用devtools实现热部署(十)
- 百度LBS服务我们自己上传数据,我们客户端获取数据然后进行小黄车和膜拜单车定位描点等骚操作
- 变量命名
- Echarts柱状图,改变柱子的颜色,后台操作
- vue实例中data使用return包裹和不使用return包裹的区别
- JavaScript实现插入排序
- hadoop学习——Hadoop核心组件
- MATLAB2015a,windows8.1安装mex环境过程记录
- mt6592 [Speech]修改acoustic loopback时延时
- ECharts 仪表盘的轴线宽度修改
- Junit4学习与使用
- Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: FUNCTION xxxx.$ does not exist
- mysql命令gruop by报错this is incompatible with sql_mode=only_full_group_by
- 关于LPC4357接汽车的CAN导致系统卡死无法工作的问题