插入排序是一种简单直观的排序算法,其基本思想是将数组分为已排序区间和未排序区间,初始时已排序区间只包含第一个元素,然后逐步将未排序区间的元素插入到已排序区间的合适位置,直到整个数组有序。
具体步骤如下:
这样,整个算法就完成了对输入数组的排序。插入排序的时间复杂度为O(n^2),是一种简单但有效的排序算法。 3.key = arr[i]
和 j = i - 1
- 将当前需要插入的元素保存在key
变量中,并将已排序区间的最后一个元素的索引保存在j
变量中。 4.while j >= 0 and key < arr[j]:
- 进入一个循环,该循环用于将当前元素插入到已排序区间的合适位置。条件j >= 0
确保我们不会越界,条件key < arr[j]
表示当前元素小于已排序区间中的某个元素。 5.arr[j + 1] = arr[j]
和 j -= 1
- 将已排序区间中大于当前元素的元素依次后移,为当前元素腾出位置。 6.arr[j + 1] = key
- 将当前元素插入到合适的位置。
最后,通过调用insertion_sort(arr)
函数并传入一个示例数组arr = [12, 11, 13, 5, 6]
,对数组进行排序。最后打印排序后的数组,即print("排序后的数组:", arr)
。
这样,整个算法就完成了对输入数组的排序。插入排序的时间复杂度为O(n^2),是一种简单但有效的排序算法。
- 从第二个元素开始,依次将元素插入到已排序区间的合适位置。
- 每次插入时,将当前元素与已排序区间中的元素从后往前逐个比较,找到合适的插入位置。
- 插入位置后的元素依次向后移动,为新元素腾出位置。
- 重复以上步骤,直到所有元素都被插入到已排序区间中。
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)
这段代码实现了插入排序算法。让我们逐行解释一下这个算法的实现过程:
1.def insertion_sort(arr):
- 定义了一个名为insertion_sort
的函数,该函数接受一个数组arr
作为输入参数。2.for i in range(1, len(arr)):
- 循环遍历数组arr
,从第二个元素开始(索引为1)直到最后一个元素。