LeetCode 插入排序 题解
LeetCode 插入排序 题解题目描述实现插入排序算法对一个整数数组进行排序。示例 1输入nums [5,2,3,1] 输出[1,2,3,5]示例 2输入nums [5,1,1,2,0,0] 输出[0,0,1,1,2,5]解题思路方法插入排序思路插入排序是一种简单的排序算法它的工作原理是通过构建有序序列对于未排序数据在已排序序列中从后向前扫描找到相应位置并插入。插入排序的过程类似于我们玩扑克牌时将每张牌插入到已排序的牌中的适当位置。复杂度分析时间复杂度O(n²)其中 n 是数组的长度。最坏情况下需要进行 n(n-1)/2 次比较和移动。空间复杂度O(1)只需要常数级的额外空间。代码实现方法插入排序def insertion_sort(nums): n len(nums) # 外循环从第二个元素开始遍历 for i in range(1, n): # 保存当前要插入的元素 key nums[i] # 内循环从已排序部分的末尾开始向前比较 j i - 1 while j 0 and nums[j] key: # 将大于key的元素向右移动 nums[j 1] nums[j] j - 1 # 将key插入到适当的位置 nums[j 1] key return nums # 测试 nums1 [5,2,3,1] print(insertion_sort(nums1)) # 输出[1,2,3,5] nums2 [5,1,1,2,0,0] print(insertion_sort(nums2)) # 输出[0,0,1,1,2,5]测试用例测试用例 1输入nums [5,2,3,1]输出[1,2,3,5]测试用例 2输入nums [5,1,1,2,0,0]输出[0,0,1,1,2,5]总结本题是排序算法的基础问题主要考察对插入排序算法的理解和实现。插入排序是一种简单直观的排序算法它通过将未排序元素插入到已排序部分的适当位置来完成排序。插入排序的核心思想是将数组分为已排序部分和未排序部分每次从未排序部分取出一个元素在已排序部分中从后向前扫描找到相应位置并插入。这种方法虽然时间复杂度较高但对于小规模数据或基本有序的数据表现较好并且是稳定的排序算法。掌握插入排序的原理对于理解其他排序算法和算法设计思想非常重要。