Skip to content
文档章节

插入排序

原理

插入排序,假设排序第 i 个数据, 数据内容记作 num ,则 i 之前的数据已经排好, i 之后的数据还没有处理,则将 第 i 条数据插入前 i-1 条数据之中。因此方案是,从 第 i-1 条开始比较,如果第 i-1 条数据 > num , 则 num 所在最终位置一定在 i -1 之前的位置。将 第 i-1 条数据后移一位, 继续向前进入下次循环,知道找到核实位置。

插入排序:可以理解为打牌时排列纸牌顺序。

性质

稳定性

插入排序是一种稳定的排序算法。

时间复杂度

插入排序的最优时间复杂度为 O(n) ,在数列几乎有序时效率很高。

插入排序的最坏时间复杂度和平均时间复杂度都为 O()

伪代码实现

python
INPUT: An Array A consisting of n elements
OUTPUT: A will be sorted in nondecreasing order stably

Method:

# 从第二个数据开始
for i <- 2 to n
  key <- A[i]
  j <- i-1

  while j > 0 and A[j] > key
    A[j+1] = A[j]
    j <- j-1

  A[j+1] = key

JS 实现算法

js
Array.prototype.insertSort = function () {
  let arr = this.slice(0);

  for (var i = 1; i < arr.length; i++) {
    var j = i - 1;
    var num = arr[i];
    while (j >= 0 && arr[j] > num) {
      arr[j + 1] = arr[j];
      j--;
    }
    arr[j + 1] = num;
  }
  return arr;
};

var a = [3, 5, 3, 0, 8, 6, 1, 5, 8, 6, 2, 4, 9, 4, 7, 0, 1, 8, 9, 7, 3, 1, 2, 5, 9, 7, 4, 0, 2, 6];

console.log(a.insertSort());