此公众号会发表计算机考研(初复试信息)、夏令营等资料,方便考研人对信息的获取,节约自身查找资料的时间,回复408,可获得数据结构、操作系统、计算机网络、计算机组成原理全科资料
把所有排序算法手动实现一遍系列,为方便回顾,记录于此
# 自上而下调整堆
def maxHeapify(arr, i, size):
left = 2 * i + 1
right = 2 * i + 2
largest = i
if left < size and arr[largest] < arr[left]:
largest = left
if right < size and arr[largest] < arr[right]:
largest = right
if largest != i:
arr[i], arr[largest] = arr[largest], arr[i]
maxHeapify(arr, largest, size)
# 构建一个大根堆
def buildMaxHeap(arr):
size = len(arr)
for i in range(size//2,-1,-1):
maxHeapify(arr,i,size)
#堆排序
def heapSort(arr):
if not arr:
return
size=len(arr)
buildMaxHeap(arr)
for i in range(size-1,-1,-1):
arr[0],arr[i]=arr[i],arr[0]
size-=1
maxHeapify(arr,0,size)
算法测试
arr=[2,5,1,2,6,10]
size=len(arr)
heapSort(arr)
print(arr)