算法训练营(二):堆排序

xiaoxiao2025-05-30  20

堆排序过程


建立大顶堆或者小顶堆,大顶堆(一种二叉树型结构,子树节点值都小于父节点的值)。这个过程的要点是:先从最后一个非叶子节点开始构建堆,因为最后一个非叶子节点才有可能需要调整,然后向前查找的节点都有子树,都有可能需要调整。排序过程。建立好了大顶堆,那么第一个节点,肯定是所有节点中值最大的节点,所以把第一个节点和最后一个节点值互换。那么最大的节点就在最后了。这个时候需要重新调整的节点为第一个节点,而不需要像构建大顶堆那样从最后一个非叶子节点开始,因为除了第一个节点以外,其他的节点都是子树节点小于父节点,所以是Max_Heapify(heap,0,i),树长度为n-1,因为最后一个节点为最大节点,不需要再调整了,否则又会调整到第一个节点了。

代码实现


#/usr/bin/python #coding:utf8 def Max_Heapify(heap, root, n): left = 2 * root + 1 right = left + 1 if left < n and heap[left] > heap[root]: ┆ heap[left], heap[root] = heap[root], heap[left] ┆ Max_Heapify(heap,left, n) if right < n and heap[right] > heap[root]: ┆ heap[right], heap[root] = heap[root], heap[right] ┆ Max_Heapify(heap, right, n) def Build_Heap(numlist): n = len(numlist) for i in range((n//2 - 1),-1, -1): ┆ Max_Heapify(numlist, i, n) def sort(heap): n = len(heap) for i in range(n-1,-1, -1): ┆ heap[0], heap[i] = heap[i], heap[0] ┆ Max_Heapify(heap,0,i) heap = [4,6,8,5,9] Build_Heap(heap) sort(heap) print heap

参考: https://blog.csdn.net/minxihou/article/details/51850001 https://www.cnblogs.com/chengxiao/p/6129630.html

转载请注明原文地址: https://www.6miu.com/read-5030956.html

最新回复(0)