下面是是heapsort的代码,在运行过程中总会出现UnboundLocalError: local variable 'new_n' referenced before assignment, 但是我又看不出来为什么出问题,特此请教希望有大佬可帮忙!
#1.heapify
def heapify_mod(n,array):
#if have at leat 1 child,go compare
swapped = True
while (2*n+1)<len(array) and swapped:
swapped = False
#if got both child
if (2*n+2)<= (len(array)-1):
#if less than either
if array[n]<array[2*n+1] or array[n]<array[2*n+2]:
if array[2*n+2]>array[2*n+1]:
array[n],array[2*n+2] = array[2*n+2],array[n]
new_n = 2*n+2
swapped = True
else:
array[n],array[2*n+1] = array[2*n+1],array[n]
new_n = 2*n+1
swapped = True
#if only left child
else:
if array[n]<array[2*n+1]:
array[n],array[2*n+1] = array[2*n+1],array[n]
new_n = 2*n+1
swapped = True
** n = new_n**
print(new_n,array)
return array
def heap(array):
length = len(array)
n = length//2-1
while n>=0:
array = heapify_mod(n,array)
n-=1
return array
#3.heapsort
def heapsort(array):
heapsorted = []
while len(array)>1:
heaped = heap(array)
heapsorted.append(heaped[0]) #descending
array = heaped[1:]
heapsorted.append(heaped[0])
return heapsorted
array = [1, 2, 8, 7, 14, 9, 3, 10, 4, 16]
print(heapsort(array))
n = new_n(标粗的那一行)
UnboundLocalError: local variable 'new_n' referenced before assignment
之后又试着把这一行去掉,直接用n = 2*n+1,然后就没问题了,但不清楚是为什么。
大概的意思是使用了没有初始化new_n。