排序算法-插入排序

Posted natsu-cc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法-插入排序相关的知识,希望对你有一定的参考价值。

实现原理:

插入排序算法是基于某序列已经有序排列的情况下,通过一次插入一个元素的方式按照原有排序方式增加元素。这种比较是从该有序序列的最末端开始执行,即要插入序列中的元素最先和有序序列中最大的元素比较,若其大于该最大元素,则可直接插入最大元素的后面即可,否则再向前一位比较查找直至找到应该插入的位置为止。

插入排序的基本思想是,每次将1个待排序的记录按其关键字大小插入到前面已经排好序的子序列中,寻找最适当的位置,直至全部记录插入完毕。执行过程中,若遇到和插入元素相等的位置,则将要插人的元素放在该相等元素的后面,因此插入该元素后并未改变原序列的前后顺序。我们认为插入排序也是一种稳定的排序方法。



代码:

function insertionSort(arr) 
    const len = arr.length;
    let prevIndex, current;
    for(let i = 1; i < len; i++) 
        prevIndex = i - 1;
        current = arr[i];

        while(prevIndex >= 0 && arr[prevIndex] > current) 
            arr[prevIndex + 1] = arr[prevIndex];
            prevIndex--;
        
        arr[prevIndex + 1] = current;
    

    return arr;

将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)

总结:

插入排序分析:
  • 时间复杂度: 平均时间复杂度O(n^2) 、最好情况O(n)、最差情况O(n^2)
  • 空间复杂度: O(1)
  • 稳定性:稳定
插入排序优缺点:
  • 插入排序算法简单,当待排序记录数量n很小时,局部有序时,较为适用
  • 当n很大时,其效率不高

以上是关于排序算法-插入排序的主要内容,如果未能解决你的问题,请参考以下文章

插入排序(直接插入排序折半插入排序希尔排序的算法思想及代码实现)

插入排序算法初学算法之排序--直接插入排序

算法排序算法之插入排序

第三篇,插入排序算法:直接插入排序希尔排序

八大内部排序算法之希尔堆排序插入排序算法

排序算法之冒泡选择插入排序(Java)