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