用JavaScript实现插入排序

217 阅读1分钟

一、简介

  • 时间复杂度:O(n²)
  • 空间复杂度:O(1)
  • 稳定性:稳定
  • 优点:数据基本有序时,用它比较快;稳定;空间复杂度低,消耗内存少
  • 缺点:时间复杂度高,执行效率差

二、核心思想

  • 分成 有序部分 和 无序部分
  • 无序部分中的元素插入到有序部分中合适的位置
  • 两层循环
  • 第一层由左往右遍历无序部分,插入到有序合适的位置,合适的位置由第二层循环决定
  • 第二层从右往左遍历有序部分,与待插入元素比较,比插入元素大则向右移动

三、排序动图

红色:待插入元素
绿色:与待插入元素比较的有序元素
黄色:有序部分
蓝色:无序部分

插入排序.gif

四、代码实现

代码地址:github.com/shubenwumin…

const insertSort = function (arr) {
  // 待插入元素
  let currentInsert;
  // 有序下标
  let orderIndex;
  let length = arr.length;
  // 遍历无序元素,将他们依次插入到有序部分的合适位置
  for (let i = 1; i < length; i++) {
    currentInsert = arr[i];
    orderIndex = i - 1;
    // 从右往左遍历,找到插入的合适位置, 并将比插入元素大的元素右移
    while(orderIndex >= 0 && arr[orderIndex] > currentInsert) {
      arr[orderIndex + 1] = arr[orderIndex];
      orderIndex--;
    }
    
    // 插入元素
    arr[orderIndex + 1] = currentInsert;
  }
  return arr;
}