插入排序(Insertion Sort)是一种简单的排序算法,它将一个数组分成已排序和未排序两部分,然后逐步将未排序部分的元素插入已排序部分的正确位置。以下是插入排序的代码示例以及时间和空间复杂度分析,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。
插入排序的代码示例(升序排序):
def insertion_sort(arr):
n = len(arr)
for i in range(1, n):
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 = [64, 34, 25, 12, 22, 11, 90]
insertion_sort(arr)
print("排序后的数组:", arr)
时间复杂度分析:
插入排序的时间复杂度取决于输入数据的初始排列。在最坏情况下,当输入数据是逆序排列时,插入排序需要进行最多的比较和移动操作。对于每个未排序元素,都要与已排序部分的所有元素比较,因此总的比较次数为 1 + 2 + 3 + ... + (n-1),这是一个等差数列,其和为 (n-1)n/2。因此,最坏情况下插入排序的时间复杂度是 O(n^2)。在最好的情况下,当输入数据已经有序时,插入排序的时间复杂度是 O(n)。
空间复杂度分析:
插入排序是一种原地排序算法,它不需要额外的空间来存储数据,因此其空间复杂度是 O(1),即常数级别的空间消耗。
总结:插入排序虽然是一种简单的排序算法,但在某些情况下,特别是对于小型数据集或者数据已经接近有序的情况下,它的性能可以相当不错。然而,在大规模数据集上,插入排序通常不如快速排序或归并排序等更高效的排序算法。由于其时间复杂度为 O(n^2),在大规模数据集上性能相对较差。