您的位置:首页 > 其它

排序算法——插入排序

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: