题目
对于一个int数组,请编写一个堆排序算法,对数组元素排序。
给定一个int数组A及数组的大小n,请返回排序后的数组。
测试样例:
[1,2,3,5,2,3],6
[1,2,2,3,3,5]
思路
堆排序,建立一个大根堆,然后交换第一个和最后一个元素,不断调整堆。
代码
class HeapSort:
def adjustHeap(self, A, parent, n):
while parent < n:
child1 = 2 * parent
child2 = 2 * parent + 1
if child1 < n:
maxchild = child1
if child2 < n:
maxchild = child1 if A[child1] > A[child2] else child2
if A[parent] < A[maxchild]:
A[parent], A[maxchild] = A[maxchild], A[parent]
parent = maxchild
else:
break
else:
break
def heapSort(self, A, n):
# write code here
for i in range(n // 2 + 1)[::-1]:
self.adjustHeap(A, i, n)
for i in range(n)[::-1]:
A[0], A[i] = A[i], A[0]
self.adjustHeap(A, 0, i)
return A