理解直接插入排序

直接插入排序是一种简单易懂的排序算法,适合小规模数据的排序。它的基本思想是将一个待排序的元素插入到已经排序好的部分中,直到整个序列有序。今天我们将通过一系列步骤来实现这个算法,并附上详细的代码和说明,帮助你更好地理解这一过程。

整体流程

下面的表格概述了直接插入排序的基本步骤:

步骤 描述
1 从第二个元素开始,假设第一个元素已经排序。
2 取出当前元素,并与已排序部分进行比较。
3 将较大的元素向后移动,腾出位置。
4 将当前元素插入到合适的位置中。
5 重复以上步骤,直到所有元素都已排序。

代码实现

现在,让我们一步步来实现直接插入排序的 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  # 插入当前元素到合适位置
    
    return arr  # 返回排序后的数组

# 示例:调用插入排序函数
unsorted_list = [12, 11, 13, 5, 6]
sorted_list = insertion_sort(unsorted_list)
print("排序后的数组:", sorted_list)  # 输出: [5, 6, 11, 12, 13]

代码分析

  1. 定义函数def insertion_sort(arr): 定义排序函数,接收一个数组。

  2. 遍历数组for i in range(1, len(arr)): 从第二个元素开始遍历数组。

  3. 当前元素key = arr[i] 取出当前要插入的元素。

  4. 比较和移动:使用while循环,检查当前元素与已排序部分的元素。如果当前元素小于已排序部分的元素,就将这些较大的元素向后移动。

  5. 插入当前元素arr[j + 1] = key 找到合适的位置后,将当前元素插入。

  6. 返回结果:最后记录下完整的排序结果,并通过print()语句返回。

饼状图展示

为了使你更直观地理解排序过程,我们可以使用饼状图来展示已排序部分和待排序部分的变化。

pie
    title 排序过程
    "已排序部分": 50
    "待排序部分": 50

这个饼状图展示了在排序过程中已排序部分与待排序部分的大致占比变化。随着排序的进行,已排序部分的比例逐渐增大,而待排序部分的比例则逐渐减小,直到整个数组都被排序完毕。

结尾

直接插入排序是一种易于实现的排序算法,在小规模数据的排序任务中表现良好。通过上述步骤和代码示例,相信你已经对如何实现直接插入排序有了清晰的认识。你可以尝试将上述代码应用于不同的数据集,以感受排序过程的实际效果。如有任何问题,请随时向我询问!