堆排序
import random def generate_big_root_heap(li,low,hight): i = low j = 2 * i + 1 tmp = li[i] while j <= hight: if j + 1 <= hight and li[j+1] > li[j]: j = j + 1 if li[j] > tmp: li[i] = li[j] i = j j = 2 * i + 1 else: break li[i] = tmp def generate_low_root_heap(li,low,hight): i = low j = 2 * i + 1 tmp = li[low] while j <= hight: if j + 1 <= hight and li[j+1] < li[j]: j = j + 1 if li[j] < tmp: li[i] = li[j] i = j j = 2 * i + 1 else: break li[i] = tmp def heap_sort(li): n = len(li) # 建堆 for i in range((n-1-1)//2,-1,-1): # generate_big_root_heap(li,i,n-1) # 大根堆 generate_low_root_heap(li,i,n-1) # 小根堆 print(li) # 堆向下调整 for i in range(n-1,-1,-1): li[i], li[0] = li[0], li[i] # generate_big_root_heap(li,0,i-1) # 大根堆 generate_low_root_heap(li,0,i-1) # 小根堆 def main(): li = [i for i in range(100)] random.shuffle(li) print(li) heap_sort(li) print(li) if __name__ == '__main__': main()