插入排序是将数列中的元素逐一与排序好的数据进行比较,并找到合适的位置插入,插入排序也有两种形式,递增数列和递减数列;
def insert(data):
for i in range(5):
temp = data[i]
j = i-1
while j >= 0 and temp < data[j]:
data[j+1] = data[j]
j -= 1
data[j+1] = temp
return data
text = insert([2,45,26,43,89])
print(text) # [2, 26, 43, 45, 89]
步骤解析:
(1)有这样一组数列,现在我们对其进行递增排序
(2)用第一个位置的数据占位,放在新数列的第一个位置
(3)取原数列第二个位置上的数45与2进行比较,因为45>2,所以将其插入到新数列的第二位#[2, 45]
(4)取原数列第三个位置上的数26与45和2进行比较,因为2>26>45,所以将其插入到45前面的位置,将45向后移一位 #[2, 26, 45]
(5)取原数列第三个位置上的数43与26,45和2进行比较,2>26>43>45,所以将其插入到45前面的位置,将45向后移一位 #[2, 26, 43, 45]
(6)取原数列第三个位置上的数89与43,26,45和2进行比较,2>26>43>45>89,所以将其插入到45后面 #[2, 26, 43, 45, 89]
(7)5个数全部排完,返回结果
用途
插入排序适用于小规模数据的排序,或者部分已经排序好的数据。它的时间复杂度为O(n^2),但在某些情况下,它的性能优于其他O(n^2)算法,如冒泡排序。
注意事项
- 稳定性:插入排序是稳定的排序算法,即相等的元素在排序后保持原来的顺序。
- 空间复杂度:插入排序的空间复杂度为O(1),因为它只需要一个额外的存储空间(临时变量)。
- 适用场景:对于小规模数据或部分有序的数据,插入排序是一个不错的选择。
平均时间复杂度 | 最坏时间复杂度 | 空间复杂度 | |
插入排序算法 | O(n2) | O(n2) | O(1) |