不稳定,适用于记录较多的文件,时间复杂度O(nlogn)
def adjust_heap(lists,i,lens):
lchild = 2*i + 1
rchild = 2*i + 2
maxs = i
if i < lens//2:
if lchild < lens and lists[lchild] > lists[maxs]:
maxs = lchild
if rchild < lens and lists[rchild] > lists[maxs]:
maxs = rchild
if maxs != i:
lists[maxs], lists[i] = lists[i], lists[maxs]
adjust_heap(lists,maxs,lens)
def build_heap(lists,lens):
for i in range(lens//2)[::-1]:
adjust_heap(lists,i,lens)
def heap_sort(lists):
lens = len(lists)
build_heap(lists,lens)
for i in range(lens)[::-1]:
lists[0], lists[i] = lists[i], lists[0]
adjust_heap(lists,0,i)
if __name__ == '__main__':
lists = [3, 4, 2, 8, 9, 5, 1]
print('排序前序列为:',end='')
for i in lists:
print(i,end=' ')
print('\n排序后结果为:',end='')
heap_sort(lists)
for i in lists:
print(i,end=' ')