堆排序算法
先看第一个函数HeapAdjust,这个函数功能是在已经是构成堆的二叉树上,如果节点k数据变化了,对节点k进行修正,使之成为一个新的堆二叉树,n为数据长度。
def HeapAdjust(lst,k,n): while(2*k+1<n): j=2*k+1 if j+1<n and lst[j]>lst[j+1]: j=j+1 if lst[j]<lst[k]: temp=lst[k] lst[k]=lst[j] lst[j]=temp k=j else: break return lst
HeapSort函数,利用上面的第一个函数构建堆二叉树,并利用上面的函数进行排序
def HeapSort(lst): n=len(lst) for i in range(int(n/2)-1,-1,-1): lst=HeapAdjust(lst,i,n) print(lst) for i in range(n-1,0,-1): temp=lst[0] lst[0]=lst[i] lst[i]=temp lst=HeapAdjust(lst,0,i) return lst
测试函数
a=[1,5,2,8,3,4,6,9,7] print(a) result=HeapSort(a) print(result)
时间: 2024-10-11 13:16:33