如何实现 Python 插入法排序

插入法排序(Insertion Sort)是一种简单且直观的排序算法,它的主要思想是将一个序列分为已排序和未排序两部分,逐步将未排序部分的元素插入到已排序部分的合适位置,直至整个序列有序。下面我将详细介绍如何在 Python 中实现插入法排序。

插入法排序流程

我们首先需要了解插入法排序的基本流程,以下是该过程的步骤表:

步骤 描述
1 从第二个元素开始,视它为当前插入元素
2 将该元素与已排序部分的元素逐一比较
3 找到合适的位置并插入当前元素
4 继续对下一个元素重复步骤 1 - 3,直到所有元素都被处理
5 返回已排序的数组

插入法排序的实现

接下来,我们来实现插入法排序。以下是对应的代码以及注释,帮助你理解每一行代码的含义。

def insertion_sort(arr):
    # 遍历从第二个元素开始
    for i in range(1, len(arr)):
        key = arr[i]  # 记录当前要插入的元素
        j = i - 1  # 从已排序部分的最后一个元素开始比较
        
        # 向前检查已排序部分,找到合适的位置
        while j >= 0 and key < arr[j]: 
            arr[j + 1] = arr[j]  # 将大于 key 的元素向后移动
            j -= 1  # 移动到下一个元素
        
        arr[j + 1] = key  # 在合适的位置插入 key
    
    return arr  # 返回排序完成的数组

代码解析

  1. 定义函数:我们定义了一个名为 insertion_sort 的函数,接收一个列表 arr 作为参数。

  2. 遍历数组:使用 for 循环从数组的第二个元素开始遍历。

  3. 记录当前元素:将当前元素(即需要插入的那个元素)存储在 key 变量中。

  4. 比较并插入

    • 使用 while 循环比较 key 和已排序部分的元素,若已排序元素大于 key,则将其后移。
    • 当找到合适的位置时,将 key 插入。
  5. 返回结果:最后返回已排序的数组。

序列图

以下是插入排序的序列图,展示了从未排序到排序的变化过程:

sequenceDiagram
  participant A as 原始数组
  participant B as 排序数组
  A->>B: 插入第1个元素
  A->>B: 插入第2个元素
  B->>B: 比较和插入(步骤2-4)
  A->>B: 插入第3个元素
  B->>B: 比较和插入(步骤2-4)
  A->>B: 插入完成

甘特图

接下来,我们用甘特图表示插入法排序的步骤和持续时间:

gantt
    title 插入法排序
    dateFormat  YYYY-MM-DD
    section 插入过程
    初始化     :done,    des1, 2023-10-01, 1d
    插入第1个元素  :done,    des2, after des1, 1d
    插入第2个元素  :done,    des3, after des2, 1d
    插入第3个元素  :done,    des4, after des3, 1d
    完成     :active,  des5, after des4, 1d

最后总结

通过以上步骤,你可以清晰地理解和实现插入法排序的逻辑与代码。虽然它在处理较小规模的数据时效率不错,但对于大型数据集,插入法排序并不是最优选择,因此在实际应用中需要根据需求选择适合的排序算法。

在学习编程的过程中,掌握不同类型的排序算法是非常重要的,这不仅能提升你的编程能力,还能帮助你在面试中脱颖而出。希望你能够通过这次的学习,将插入法排序的实现过程牢牢记住并运用到实际项目中。继续加油,编程的世界还有更多等待你去探究的内容!