插入排序的实现方式

原理

插入排序算法的策略是从第一个元素开始,依次扫描整个序列,并把当前元素插入到前面已排好序的序列中的合适位置。需要注意的一个特点是,在扫描到的当前元素之前的元素都是有序的。
找了几种实现方式研究了一下发现实际上都是差不多的,要是硬说有什么区别,可以理解为:

  • 一种是首先保存这个待插入元素,然后把前面有序序列中的比当前待排序元素大的元素依次后移,空出一个位置来,然后把当前元素插入;
  • 另一种是当前元素就从有序序列的结尾开始依次比较,和前面每一个比自己大的元素进行交换,直到交换至合适的位置。

注:以下名字是我瞎起的

空位插入法

function insertSort1(arr) {
    var len = arr.length;
    for (var i = 1; i < len; i++) { 
        X = arr[i]; // X 是等待被插入的数
        for (var j = i-1; j >= 0 && arr[j] > X; j--) {
            // 从i的前一位往前遍历,直到j位置上的数比X小
            arr[j+1] = arr[j]; // 把每一位往后挪,空出位置给X
        }
        arr[j+1] = X; // 将X插入空位
    }
}

交换法

function insertSort2(arr) {
    var len = arr.length;
    for (var i = 1; i < len; i++) { 
        // 从第i个往前,序列都是有序的
        for (var j = i - 1; j >= 0 && arr[j] > arr[j+1]; j--) { 
            //j+1是第i个,也就是待比较元素,将这个和前面已排序的比较,并依此交换直到前面的数比自己小
            temp = arr[j];
            arr[j] = arr[j+1];
            arr[j+1] = temp;
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值