堆排序:
堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,平均时间复杂度均为O(nlogn),与归并算法排序相比较的优点是它在数据的原地址进行排序,不需要额外的空间存储临时数据。堆是二叉树的一种。在代码实现过程中使用的是数组对堆进行存储。
如下图所示,是数组A=(4, 1, 3, 2, 16, 9, 10, 14, 8, 7)的最大堆示意图:
Max_Heapify函数实现过程:
Build_Max_Heap函数调用Max_Heapify函数实现过程:
Python代码实现:
global A_Heapsize
A_Heapsize = 0
def Max_Heapify(A, i):
L = 2*i + 1
R = 2*i + 2
largest = i
if L < A_Heapsize:
if A[L] > A[i]:
largest = L
else:
largest = i
if R < A_Heapsize:
if A[R] > A[largest]:
largest = R
if largest != i:
temp = A[largest]
A[largest] = A[i]
A[i] = temp
Max_Heapify(A, largest)
return 0
def Build_Max_Heap(A):
for i in range(int(A_Heapsize/2), -1, -1):
Max_Heapify(A, i)
return 0
def Heapsort(A):
global A_Heapsize
A_Heapsize = len(A)
Build_Max_Heap(A)
for i in range(A_Heapsize-1, 0, -1):
temp = A[i]
A[i] = A[0]
A[0] = temp
A_Heapsize -= 1
Max_Heapify(A, 0)
A = [4, 1, 3, 2, 16, 9, 10, 14, 8, 7]
print('Before sort:', A)
Heapsort(A)
print('After sort:', A)
运行结果: