Skip to content
On this page

插入排序

image.png

问题抽象

A: 已排序数组 x: 需要插入得元素 没有返回值

首先 JavaScript 原始实现方式

ts
const a = [1,3,5,7,88]
const x = 8
// b 代表 第一个大于x得数字
const b = a.find(a => a > x)

// b === undefined 代表所有元素都比8小

if (b === undefined) {
  a.push(x)
} else {
  const idx = a.indexOf(b)
  a.splice(idx, 0, x)
}

// 优化代码 我们直接 indexOf 获取 b 的位置
const a = [1,3,5,7,88]
const x = 8
// b 代表 第一个大于x得数字
const b = a.find(a => a > x)

const idx = a.indexOf(b)
a.splice(idx === -1 ? a.length : idx, 0 , x)
const a = [1,3,5,7,88]
const x = 8
// b 代表 第一个大于x得数字
const b = a.find(a => a > x)

// b === undefined 代表所有元素都比8小

if (b === undefined) {
  a.push(x)
} else {
  const idx = a.indexOf(b)
  a.splice(idx, 0, x)
}

// 优化代码 我们直接 indexOf 获取 b 的位置
const a = [1,3,5,7,88]
const x = 8
// b 代表 第一个大于x得数字
const b = a.find(a => a > x)

const idx = a.indexOf(b)
a.splice(idx === -1 ? a.length : idx, 0 , x)

那我们如何使用程序来完成实现上述过程

image.png

每次拿绿色的指针元素 跟 我们插入的元素进行比较 每次对比 都会向左递减方向

ts

function insert(A, x) {
  // p 指向下一个需要比较的元素
  // p + 1 指向空位
  let p = A.length - 1;

  while(p >= 0 && A[p] > x) {
    A[p + 1] = A[p]
    p--
  }
  A[p + 1] = x
}

function insert(A, x) {
  // p 指向下一个需要比较的元素
  // p + 1 指向空位
  let p = A.length - 1;

  while(p >= 0 && A[p] > x) {
    A[p + 1] = A[p]
    p--
  }
  A[p + 1] = x
}

image.png

完整的插入排序

ts
function insert(A, i,x) {
  let p = i - 1;
    while(p >= 0 && A[p] > x) {
    A[p + 1] = A[p]
    p--
  }
  A[p + 1] = x
}
function insertion_sort(A) {
  for(let i = 1; i < A.length; i++) {
    insert(A, i , A[i])
  }
}
function insert(A, i,x) {
  let p = i - 1;
    while(p >= 0 && A[p] > x) {
    A[p + 1] = A[p]
    p--
  }
  A[p + 1] = x
}
function insertion_sort(A) {
  for(let i = 1; i < A.length; i++) {
    insert(A, i , A[i])
  }
}

image.png

插入排序 has loaded