Python 堆排序
进行堆排序(大根堆)主要解决以下问题:
- 1)构造大根堆;
- 2)交换堆顶元素和最小值;
- 3)重复 2
def help_adjust(L,start,end):
temp=L[start]
i=start
j=2*i
while j<=end: # 这里一定要有等于
if j<endand L[j]<L[j+1]: # 保证右子树小于左子树
j+=1
if temp<L[j]: # 根节点大于左子树
L[i]=L[j]
i=j
j=2*i
else:
break
L[i]=temp
# 交换堆中元素
def swap_param(L,i,j):
L[i],L[j]=L[j],L[i]
return L
def help_sort(L):
L_length=len(L)-1 # 这里构造的无序列表在最左侧加了一个0用于更好的确定堆顶
first_sort_count=L_length//2 # 构造辅助变量用于构造大根堆
for i in range(first_sort_count):
help_adjust(L,first_sort_count-i,L_length)
for i in range(L_length-1):
swap_param(L,1,L_length-i)
help_adjust(L,1,L_length-i-1)
return[L[i]for i in range(1,len(L))]