Python算法——插入排序

插入排序(Insertion Sort)是一种简单但有效的排序算法,它的基本思想是将数组分成已排序和未排序两部分,然后逐一将未排序部分的元素插入到已排序部分的正确位置。插入排序通常比冒泡排序和选择排序更高效,特别适用于对部分有序的数组进行排序。本文将详细介绍插入排序的工作原理和Python实现。

插入排序的工作原理

插入排序的基本思想是将数组分成两部分:已排序部分和未排序部分。在开始时,已排序部分只包含数组的第一个元素,而未排序部分包含剩余的元素。算法的工作过程如下:

  1. 从未排序部分选择一个元素,将其插入到已排序部分的正确位置。
  2. 重复上述步骤,直到未排序部分为空。
    插入排序的核心思想是每一步将一个元素插入到已排序部分,并确保已排序部分仍然保持有序。这一过程逐渐扩大已排序部分,缩小未排序部分,直到整个数组有序。

下面是一个示例,演示插入排序的过程。我们以升序排序为例:

原始数组:[12, 11, 13, 5, 6]

  1. 第一步:已排序部分 [12],未排序部分 [11, 13, 5, 6],将 11 插入已排序部分。
  2. 第二步:已排序部分 [11, 12],未排序部分 [13, 5, 6],将 13 插入已排序部分。
  3. 第三步:已排序部分 [11, 12, 13],未排序部分 [5, 6],将 5 插入已排序部分。
  4. c第四步:已排序部分 [5, 11, 12, 13],未排序部分 [6],将 6 插入已排序部分。

Python实现插入排序

下面是Python中的插入排序实现:

python 复制代码
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]
            j -= 1
        arr[j + 1] = key
  • arr 是待排序的数组。
  • 外层循环 for i in range(1, len(arr)) 用于遍历未排序部分的元素。
  • 内层循环 while j >= 0 and key < arr[j] 用于找到元素的正确位置。
  • key 是当前待插入的元素,将它插入到已排序部分的正确位置。
示例代码

下面是一个使用Python进行插入排序的示例代码:

python 复制代码
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]
            j -= 1
        arr[j + 1] = key

# 测试排序
arr = [12, 11, 13, 5, 6]
insertion_sort(arr)
print("排序后的数组:", arr)

时间复杂度

插入排序的时间复杂度为 O(n^2),其中 n 是数组的长度。尽管插入排序不如高级排序算法(如快速排序和归并排序)高效,但它在小型数据集上表现良好,尤其在数组部分有序的情况下。

总之,插入排序是一种简单但有效的排序算法,通过将元素逐一插入到已排序部分,实现了排序数组的目标。了解插入排序有助于理解排序算法的基本原理,并为选择适当的排序算法提供了基础。

相关推荐
代码雕刻家12 分钟前
数据结构-3.9.栈在递归中的应用
c语言·数据结构·算法
雨中rain12 分钟前
算法 | 位运算(哈希思想)
算法
FreakStudio40 分钟前
全网最适合入门的面向对象编程教程:56 Python字符串与序列化-正则表达式和re模块应用
python·单片机·嵌入式·面向对象·电子diy
丶21361 小时前
【CUDA】【PyTorch】安装 PyTorch 与 CUDA 11.7 的详细步骤
人工智能·pytorch·python
Kalika0-02 小时前
猴子吃桃-C语言
c语言·开发语言·数据结构·算法
_.Switch2 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j
一个闪现必杀技2 小时前
Python入门--函数
开发语言·python·青少年编程·pycharm
sp_fyf_20242 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-02
人工智能·神经网络·算法·计算机视觉·语言模型·自然语言处理·数据挖掘
小鹿( ﹡ˆoˆ﹡ )2 小时前
探索IP协议的神秘面纱:Python中的网络通信
python·tcp/ip·php
卷心菜小温3 小时前
【BUG】P-tuningv2微调ChatGLM2-6B时所踩的坑
python·深度学习·语言模型·nlp·bug