最近在看《算法导论》,同时又在学习Python,所以想到用PYTHON实现看过的算法,来练手。
PYTHON帮忙看看有没有需要改进的写法
# Suppose the index of current item is i,
# then the parent index is int( (i-1)/2 ),
# the left child index is 2*i+1,
# the right child index is 2*i+2
heap_size = int()
def heapsort(A):
global heap_size
heap_size = 0
build_max_heap(A)
for i in range(len(A)-1, 0, -1):
# exchange A[0], A[i]
A[0], A[i] = A[i], A[0]
heap_size = heap_size-1
max_heapify(A, 0);
def build_max_heap(A):
global heap_size
heap_size = len(A)
for i in range( int( (len(A)-2)/2 ),-1,-1 ):
max_heapify(A, i)
def max_heapify(A, i):
global heap_size
l = 2*i+1
r = 2*i+2
if l <= heap_size-1 and A[l] > A[i]:
largest = l
else:
largest = i
if r <= heap_size-1 and A[r] > A[largest]:
largest = r
if largest != i:
A[larget], A[i] = A[i], A[largest]
max_heapify(A, i)
浙公网安备 33010602011771号