首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

堆排序(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(n log n)。

空间复杂度:

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

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

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OodmmJWOBbv1vpxTbTXeSACg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券