堆排序代码及时间空间复杂度

堆排序(Heap Sort)是一种基于二叉堆数据结构的排序算法,它的时间复杂度为 O(n log n),并且具有原地排序(in-place sorting)的特点。下面是堆排序的代码示例和时间空间复杂度分析,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。

堆排序代码及时间空间复杂度_第1张图片

堆排序的代码示例:

def heapify(arr, n, i):
	largest = i
	left_child = 2 * i + 1
	right_child = 2 * i + 2
	if left_child < n and arr[left_child] > arr[largest]:
		largest = left_child
	if right_child < n and arr[right_child] > arr[largest]:
		largest = right_child
	if largest != i:
		arr[i], arr[largest] = arr[largest], arr[i]
		heapify(arr, n, largest)

def heap_sort(arr):
	n = len(arr)
	# 建立最大堆
	for i in range(n // 2 - 1, -1, -1):
		heapify(arr, n, i)
	# 逐个从堆中取出元素
	for i in range(n - 1, 0, -1):
		arr[i], arr[0] = arr[0], arr[i] # 交换根节点与最后一个节点
		heapify(arr, i, 0) # 重新调整最大堆

# 示例用法
arr = [3, 6, 8, 10, 1, 2, 1]
heap_sort(arr)
print(arr)

时间复杂度:

  • 堆排序的时间复杂度:堆排序的平均、最坏和最好情况下的时间复杂度都是 O(n log n)。

空间复杂度:

堆排序是一种原地排序算法,不需要额外的空间,因此空间复杂度为 O(1)。这是堆排序的一个重要优点之一,因为它不需要额外的内存用于临时存储数据,适用于内存有限的情况。

堆排序虽然时间复杂度不如快速排序那么稳定,但在实际应用中仍然是一种非常有效的排序算法,特别适用于需要原地排序的场景。堆排序也被广泛用于实现优先队列等数据结构。

你可能感兴趣的:(python,开发语言)