堆排序(Heap Sort)是一种基于二叉堆数据结构的排序算法,它的时间复杂度为 O(n log n),并且具有原地排序(in-place sorting)的特点。下面是堆排序的代码示例和时间空间复杂度分析,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。
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(1)。这是堆排序的一个重要优点之一,因为它不需要额外的内存用于临时存储数据,适用于内存有限的情况。
堆排序虽然时间复杂度不如快速排序那么稳定,但在实际应用中仍然是一种非常有效的排序算法,特别适用于需要原地排序的场景。堆排序也被广泛用于实现优先队列等数据结构。