排序算法——插入排序

排序思路

从头开始遍历数组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;
}
原文地址:https://www.cnblogs.com/tzyy/p/4867961.html