python 插入排序(Insertion Sort)

插入排序(Insertion Sort)

插入排序是一种简单的排序算法。它的基本思想是:将数组分为已排序部分和未排序部分,然后逐个将未排序部分的元素插入到已排序部分的正确位置。插入排序类似于整理扑克牌的过程。

插入排序的步骤:
  1. 初始化:将第一个元素视为已排序部分。
  2. 插入元素:从未排序部分取出一个元素,将其插入到已排序部分的正确位置。
  3. 重复过程:重复上述步骤,直到所有元素都被排序。
时间复杂度:
  • 最坏情况:O(n²) ------ 当数组是逆序的时候。
  • 最好情况:O(n) ------ 当数组已经有序的时候。
  • 平均情况:O(n²)
空间复杂度:
  • O(1) ------ 插入排序是一种原地排序算法,不需要额外的存储空间。

Python 实现

python 复制代码
def insertion_sort(arr):
    n = len(arr)
    for i in range(1, n):
        key = arr[i]  # 当前需要插入的元素
        j = i - 1
        # 将比 key 大的元素向后移动
        while j >= 0 and arr[j] > key:
            arr[j + 1] = arr[j]
            j -= 1
        # 将 key 插入到正确位置
        arr[j + 1] = key
    return arr

# 示例使用
arr = [12, 11, 13, 5, 6]
sorted_arr = insertion_sort(arr)
print("排序后的数组:", sorted_arr)

输出结果

复制代码
排序后的数组: [5, 6, 11, 12, 13]

插入排序的详细过程

以数组 [12, 11, 13, 5, 6] 为例:

  1. 第一轮

    • 已排序部分:[12]
    • 未排序部分:[11, 13, 5, 6]
    • 11 插入到已排序部分,数组变为 [11, 12, 13, 5, 6]
  2. 第二轮

    • 已排序部分:[11, 12]
    • 未排序部分:[13, 5, 6]
    • 13 插入到已排序部分,数组变为 [11, 12, 13, 5, 6]
  3. 第三轮

    • 已排序部分:[11, 12, 13]
    • 未排序部分:[5, 6]
    • 5 插入到已排序部分,数组变为 [5, 11, 12, 13, 6]
  4. 第四轮

    • 已排序部分:[5, 11, 12, 13]
    • 未排序部分:[6]
    • 6 插入到已排序部分,数组变为 [5, 6, 11, 12, 13]
  5. 排序完成


插入排序的优缺点

优点

  • 实现简单,易于理解。
  • 对于小规模数据或基本有序的数据,效率较高。
  • 是稳定的排序算法(相同元素的相对位置不变)。

缺点

  • 时间复杂度较高,不适合处理大规模数据。
  • 对于逆序数据,性能较差。

插入排序的适用场景

  • 数据规模较小。
  • 数据基本有序。
  • 需要稳定排序的场景。
相关推荐
CodeCraft Studio4 分钟前
国产化PPT处理控件Spire.Presentation教程:使用Python将图片批量转换为PPT
python·opencv·powerpoint·ppt文档开发·ppt组件库·ppt api
鼾声鼾语21 分钟前
matlab的ros2发布的消息,局域网内其他设备收不到情况吗?但是matlab可以订阅其他局域网的ros2发布的消息(问题总结)
开发语言·人工智能·深度学习·算法·matlab·isaaclab
五阿哥永琪21 分钟前
Spring Boot 中自定义线程池的正确使用姿势:定义、注入与最佳实践
spring boot·后端·python
Data_agent34 分钟前
Python编程实战:从类与对象到设计优雅
爬虫·python
LYFlied40 分钟前
【每日算法】LeetCode 25. K 个一组翻转链表
算法·leetcode·链表
Swizard44 分钟前
别再迷信“准确率”了!一文读懂 AI 图像分割的黄金标尺 —— Dice 系数
python·算法·训练
s09071361 小时前
紧凑型3D成像声纳实现路径
算法·3d·声呐·前视多波束
可爱的小小小狼1 小时前
算法:二叉树遍历
算法
超级大只老咪1 小时前
数组的正向存储VS反向存储(Java)
java·开发语言·python
长安牧笛1 小时前
心理健康情绪日记分析系统,用户输入文字日记后,AI提取情绪关键词,焦虑/愉悦等,生成周情绪波动曲线,并推荐调节建议。
python