通俗易懂:插入排序算法全解析

11,169次阅读
没有评论

共计 1351 个字符,预计需要花费 4 分钟才能阅读完成。

倚靠窗畔
2023-12-05 15:01:36
浏览数 (1297)

插入排序算法是一种简单直观的排序算法,它的原理就像我们玩扑克牌时整理手中的牌一样。下面我将用通俗易懂的方式来解释插入排序算法的工作原理。

假设我们手上有一副无序的扑克牌,我们的目标是将它们从小到大排列起来。插入排序算法的思想是,我们从第二张牌开始,逐个将后面的牌插入到已排序的部分中。这样,我们每次插入一张牌,已排序的部分就多了一张牌,直到所有的牌都被插入到正确的位置。

飞书 20231205-150051

现在,让我们通过一个简单的例子来演示插入排序算法的过程。假设我们有以下一组数字需要排序:[5, 2, 4, 6, 1, 3]。

  1. 我们从第二个数字开始,也就是数字 2。我们将 2 与前面已排序的部分进行比较,如果它小于前面的数字,就将它插入到该数字的前面。在这个例子中,2 比 5 小,所以我们将 2 插入到 5 的前面,得到 [2, 5, 4, 6, 1, 3]。
  2. 接下来,我们将数字 4 与前面的数字进行比较。4 比 5 小,所以我们将 4 插入到 5 的前面,得到 [2, 4, 5, 6, 1, 3]。
  3. 然后,我们将数字 6 与前面的数字进行比较。6 比 5 大,所以它应该放在 5 的后面。此时,已排序部分为 [2, 4, 5],所以我们得到 [2, 4, 5, 6, 1, 3]。
  4. 我们继续这个过程,将数字 1 插入到已排序部分中。1 比 2 小,所以我们将 1 插入到 2 的前面,得到 [1, 2, 4, 5, 6, 3]。然后,我们将数字 3 插入到已排序部分中。3 比 2 大,但比 4 小,所以我们将 3 插入到 4 的前面,得到 [1, 2, 3, 4, 5, 6]。
  5. 最后,所有的数字都被插入到正确的位置,得到一个有序的数组:[1, 2, 3, 4, 5, 6]。

    通过这个例子,我们可以看到插入排序算法的基本思想。它通过逐个将未排序的元素插入到已排序的部分中,逐步构建有序的序列。这个过程类似于整理扑克牌,每次插入一张牌,整个序列就会变得更加有序。

演示动画如下:

飞书 20231205-145043

插入排序算法(C/C++)示例代码如下:

#include 

void insertionSort(int arr[], int n) {
    int i, key, j;
    for (i = 1; i = 0 && arr[j] > key) {arr[j + 1] = arr[j];
            j--;
        }
        arr[j + 1] = key;
    }
}

int main() {int arr[] = {5, 2, 4, 6, 1, 3};
    int n = sizeof(arr) / sizeof(arr[0]);
    printf("原始数组:");
    for (int i = 0; i 

总结

通过这个例子,我们可以看到插入排序算法的基本思想。它通过逐个将未排序的元素插入到已排序的部分中,逐步构建有序的序列。这个过程类似于整理扑克牌,每次插入一张牌,整个序列就会变得更加有序。虽然插入排序算法在处理小规模数据时表现良好,但对于大规模数据来说,它的效率相对较低。在实际应用中,我们可能会选择更高效的排序算法,如快速排序或归并排序。但是,了解插入排序算法的原理对于理解排序算法的工作方式和思想是非常有帮助的。

1698630578111788

如果你对编程知识和相关职业感兴趣,欢迎访问编程狮官网(https://www.w3cschool.cn/)。在编程狮,我们提供广泛的技术教程、文章和资源,帮助你在技术领域不断成长。无论你是刚刚起步还是已经拥有多年经验,我们都有适合你的内容,助你取得成功。

原文地址: 通俗易懂:插入排序算法全解析

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-09-19发表,共计1351字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)