标签:
从头开始遍历数组arr
将位置i处的数字与位置在0~i-1区间的数字比较(可以认为0~i-1区间内的数字是已经排好序的)
若0~i-1区间中的数字n>=arr[i],则将arr[i]插入n之前
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; }
标签:
原文地址:http://www.cnblogs.com/tzyy/p/4867961.html