排序算法——插入排序
2015-10-10 18:19
316 查看
排序思路
从头开始遍历数组arr将位置i处的数字与位置在0~i-1区间的数字比较(可以认为0~i-1区间内的数字是已经排好序的)
若0~i-1区间中的数字n>=arr[i],则将arr[i]插入n之前
javascript实现
function insertionSort(arr){ if(!(arr instanceof Array)) return []; if(arr.length<=1) return arr; var res=[],//结果数组 cur,//当前待插入的值 index;//指针位置 while(arr.length){ cur=arr.pop(); index=0; //遍历结果数组,定位cur应该插入的位置 res.every(function (n,i) { index=i; if(n>=cur){ //结束本次every return false; } //若结果数组中没有元素大于待插入元素,指针应该移动到最后边 index=i+1; return true; }); //插入当前数字 res.splice(index,0,cur); } return res; }
这种实现用一个新数组来存储已经排好序的部分,便于理解。
下面这种比较精简一点
function insertionSort(arr){ if(!(arr instanceof Array)) return []; if(arr.length<=1) return arr; var index,insertIndex; arr.forEach(function (n,i) { for(index=0,insertIndex=0;index<i;index++){ insertIndex=index; if(arr[index]>=n){ break; } insertIndex=index+1; } arr.splice(insertIndex,0,arr.splice(i,1)[0]); }); return arr; }
相关文章推荐
- oracle创建用户
- OpenCV基本绘图
- 网络小白的自言自语
- loadrunner中定义数组
- oracle创建表相关
- 《Neural Networks for Machine Learning》 by Hinton 学习笔记(一)
- LightOJ 1138 Trailing Zeroes (III)
- 第六周项目3括号的匹配
- Android中的GraphicBuffer同步机制-Fence
- XSD中的内置数据类型
- CUDAExample-0-asyncAPI
- BZOJ 3922 - Karin的弹幕
- JUnit4 与 JMock 之双剑合璧
- 短信验证安卓集成mob.com
- Android之菜单总结
- mocha测试
- Viewpager的setOnPageChangeListener方法详解
- spawn-fcgi 源码分析
- C语言:求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,例如:2+22+222+2222+22222
- CSU1613 Elephants