堆排序基本思路

堆排序的基本思路:

  a.将无需序列构建成一个堆,根据升序降序需求选择大顶堆或小顶堆;

  b.将堆顶元素与末尾元素交换,将最大元素"沉"到数组末端;

  c.重新调整结构,使其满足堆定义,然后继续交换堆顶元素与当前末尾元素,反复执行调整+交换步骤,直到整个序列有序。

转载于:https://my.oschina.net/u/4177395/blog/3102142

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
堆排序(Heap Sort)是一种基于完全二叉树的排序算法,它的核心思想是通过建立一个二叉堆(heap)来实现排序。 堆是一种数据结构,它满足以下两个条件: 1. 堆是一棵完全二叉树(除了最后一层,其他层都是满的,最后一层从左到右排列)。 2. 堆中的每个节点都要满足堆的性质,即父节点的值大于(或小于)它的子节点的值,根据父节点的值与子节点的值的大小关系,堆被分为大根堆和小根堆。 堆排序基本思路是将待排序的序列构建成一个大根堆或小根堆,然后将堆顶元素与堆底元素交换位置,再对剩余的元素重新构建堆,重复此过程直到所有元素都排好序。 堆排序的时间复杂度为O(nlogn),空间复杂度为O(1),它是一种不稳定的排序算法,因为在交换堆顶元素和堆底元素时可能会破坏相同元素的相对位置关系。 下面是一个简单的堆排序实现代码: ```python def heap_sort(arr): n = len(arr) # 构建大根堆 for i in range(n // 2, -1, -1): heapify(arr, n, i) # 逐个取出堆顶元素,放到末尾,重新构建堆 for i in range(n - 1, 0, -1): arr[0], arr[i] = arr[i], arr[0] heapify(arr, i, 0) def heapify(arr, n, i): # 将以i为根节点的子树调整为大根堆 largest = i left = 2 * i + 1 right = 2 * i + 2 if left < n and arr[left] > arr[largest]: largest = left if right < n and arr[right] > arr[largest]: largest = right if largest != i: arr[largest], arr[i] = arr[i], arr[largest] heapify(arr, n, largest) ``` 其中,heapify函数用于将以i为根节点的子树调整为大根堆,heap_sort函数用于构建堆和排序

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值