js版插入排序代码及过程演示

48 阅读1分钟

js版插入排序代码及过程演示

JavaScript代码

function insertionSort(arr) {
  for (let i = 1; i < arr.length; i++) {
    let key = arr[i];
    let j = i - 1;
    while (j >= 0 && arr[j] > key) {
      arr[j + 1] = arr[j]; // 移动元素
      j--;
    }
    arr[j + 1] = key; // 插入元素
  }
  return arr;
}

// 示例数组
let array = [5, 3, 8, 4, 2, 1];

// 调用插入排序函数
let sortedArray = insertionSort(array);

// 输出排序后的数组
console.log(sortedArray); // [1, 2, 3, 4, 5, 8]

排序过程

初始数组:[5, 3, 8, 4, 2, 1]

第一次外循环(i=1)

  • 当前元素:3
  • 已排序部分:[5]
  • 未排序部分:[8, 4, 2, 1]
  • 操作:将3插入到已排序部分,得到[3, 5]
  • 数组变为:[3, 5, 8, 4, 2, 1]

第二次外循环(i=2)

  • 当前元素:8
  • 已排序部分:[3, 5]
  • 未排序部分:[4, 2, 1]
  • 操作:8已在已排序部分的末尾,无需移动
  • 数组保持为:[3, 5, 8, 4, 2, 1]

第三次外循环(i=3)

  • 当前元素:4
  • 已排序部分:[3, 5, 8]
  • 未排序部分:[2, 1]
  • 操作:将4插入到已排序部分,得到[3, 4, 5, 8]
  • 数组变为:[3, 4, 5, 8, 2, 1]

第四次外循环(i=4)

  • 当前元素:2
  • 已排序部分:[3, 4, 5, 8]
  • 未排序部分:[1]
  • 操作:将2插入到已排序部分,得到[2, 3, 4, 5, 8]
  • 数组变为:[2, 3, 4, 5, 8, 1]

第五次外循环(i=5)

  • 当前元素:1
  • 已排序部分:[2, 3, 4, 5, 8]
  • 未排序部分:空
  • 操作:将1插入到已排序部分,得到[1, 2, 3, 4, 5, 8]
  • 数组变为:[1, 2, 3, 4, 5, 8]

至此,整个数组已经完全排序完成,最终结果为[1, 2, 3, 4, 5, 8]