JavaScript 实现插入排序算法详解

什么是插入排序算法?

插入排序是一种基于数组遍历并为每个元素寻找正确位置的排序技术。它会将当前元素与其前驱元素进行比较,如果当前元素较小,则继续向前比较。通过移动所有比它大的元素,为当前交换出的元素腾出空间。

插入排序的工作原理

让我们考虑一个示例数组:arr = [ 64, 25, 12, 22, 11]

步骤 1: 使用变量 i 通过 for 循环遍历数组。

[ 64, 25, 12, 22, 11]  // 原始数组

步骤 2:i = 0 时(即第一个索引),因为它是第一个元素,所以数组不会发生任何变化。

[ 64, 25, 12, 22, 11] // key = 64, i = 0

步骤 3: 当 INLINECODE7ea2fb15 时,将该值存储为 INLINECODE3242d56e,并检查前面的元素是否比它大。如果是,则将 key 与所有较大的前驱元素进行交换。

[ 64, 25, 12, 22, 11] -> [25, 64, 12, 22, 11]  // key = 25, i = 1

步骤 4: 由于索引 3 处的值(即 12)比所有的前驱元素都小,它们都将通过另一个 for 循环与 12 进行交换,该循环从 INLINECODEe33463d1 到 INLINECODE42a2ff33 索引反向运行。

[25, 64, 12, 22, 11] -> [25, 12, 64, 22, 11] -> [ 12, 25, 64, 22, 11]  // key = 12, i = 2

步骤 5: 现在对于 i = 3(即 22),只有 2 个前驱元素比它大,因此它只会向后交换最多 2 个位置,如图所示。

[ 12, 25, 64, 22, 11] -> [ 12, 25, 22, 64, 11] -> [ 12, 22, 25, 64, 11]  // key = 22, i = 3

步骤 6: 现在,对于最后一个索引,由于它是数组中最小的元素,因此在使用 for 循环时,它将在临时变量 key 的帮助下被交换回 0 索引位置。

[ 12, 22, 25, 64, 11] ->  [ 12, 22, 25, 11, 64]  ->  [ 12, 22, 11, 25, 64]  -> [ 12, 11, 22, 25, 64]  -> [11,  12, 22, 25, 64]  // key = 11, i = 4

插入排序的编程实现方法

  • 为了使用插入排序对数组进行排序,我们首先使用 for 循环遍历数组,并始终将当前元素保存在一个临时变量或 key 中。
  • 在每一次迭代中,我们将 INLINECODE5194d8c1 的值与所有之前的元素进行比较。如果 INLINECODE2c0a7b68 的值更大,则什么都不做;但如果它更小,则向后交换所有前驱元素,直到该值到达正确的位置,即左边的元素更小,右边的元素更大。
  • 完成包含上述步骤的所有迭代,并返回最终排序好的数组。

示例:

JavaScript


CODEBLOCK_65e26790

输出结果

Original array: 64,25,12,22,11
After sorting: 11,12,22,25,64

总结

插入排序是一种简单且易于理解的算法,它通过遍历并与前驱元素比较数值,将数值与所有较大的元素进行交换。插入排序的时间复杂度是 O(N2),所需的辅助空间是 O(N)。基本上,插入排序对于小数据量非常有效。插入排序具有自适应性,即它适用于已经部分排序的数据集。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/22878.html
点赞
0.00 平均评分 (0% 分数) - 0