Heapsort,,#--coding: u
#--coding: utf8 --def heapsort(A): build_max_heap(A) heap_size = len(A) for i in range(len(A) - 1, 0, -1): A[0], A[i] = A[i], A[0] heap_size = heap_size - 1 # 这里与i相等 max_heapify_iter(A, 0, heap_size)def build_max_heap(A): heap_size = len(A) for i in range((heap_size - 1) / 2, -1, -1): max_heapify_iter(A, i, heap_size)# 运行时间为O(lgn),是保持最大堆性质的关键# 前提:左右子树都是最大堆# 递归方式def max_heapify(A, i, heap_size): l = 2 * i + 1 # 数组从0开始计数 r = l + 1 largest = i if l < heap_size and A[l] > A[i]: largest = l if r < heap_size and A[r] > A[largest]: largest = r if not largest == i: A[largest], A[i] = A[i], A[largest] max_heapify(A, largest, heap_size)# 迭代方式def max_heapify_iter(A, i, heap_size): while True: l = 2 * i + 1 r = l + 1 if l < heap_size and A[l] > A[i]: largest = l else: largest = i if r < heap_size and A[r] > A[largest]: largest = r if not largest == i: A[largest], A[i] = A[i], A[largest] i = largest else: break;if __name__ == "__main__": # A = [3,9,8,4,5,2,10,18,4] A = [4, 1, 3, 2, 16, 9, 10, 14, 8, 7] heapsort(A) print(A)#该片段来自于http://byrx.net
评论关闭