[Easy] 插入排序法 Insertion Sort

2024年4月11日

💎 加入 E+ 成長計畫 與超過 350+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源

插入排序法 Insertion Sort 是程式面试中很常出现的入门考题。以下我们要介绍 Insertion Sort。

如果我们有个 [3, 2, 1, 4] 阵列,我们要把他排成 [1, 2, 3, 4],用插入排序法可以这么做:

  • 用回圈迭代过要排序的阵列
  • 在迭代时,检视每个元素,
  • 把该元素跟左边的元素比,
  • 如果比左边的小,就跟左边的换顺序
  • 然后继续一路往左比,直到左边的比自己小为止,就不用继续换
  • 这时元素就会被插入到应该在的位置

[3, 2, 1, 4] 阵列具体来说,会是这样的过程:

[3, 2, 1, 4] // 3 没有左边的,不用换
 ^
[3, 2, 1, 4] // 接着到 2
    ^
[2, 3, 1, 4] // 2 比左边的 3 还小,所以交换

[2, 3, 1, 4] // 接着 到 1
       ^
[2, 1, 3, 4] // 1 比左边的 3 还小,所以交换

[1, 2, 3, 4] // 1 比左边的 2 还小,所以交换

[1, 2, 3, 4] // 接着到 4,没有左边的比它小,不用换,这时就完成排序
          ^

Insertion Sort 程式码

function insertionSort(arr) {
  // 用回圈迭代过要排序的阵列 (i 是已排序区域边界的索引)
  for (let i = 0; i < arr.length; i++) {
    // 在迭代时,检视每个元素 (当前元素是在索引 j,也就是边界 i 的下一个)
    let j = i + 1;
    // 如果比左边的小
    while (j > 0 && arr[j] < arr[j - 1]) {
      // 就跟左边的换顺序
      [arr[j - 1], arr[j]] = [arr[j], arr[j - 1]];
      // 然后继续一路往左比,直到左边的元素,比自己小为止,就不用换
      j -= 1;
    }
  }
  return arr; // 最后回传排序好的阵列
}
🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們