我对堆排序有疑问。它在算法书中说明A.heap-size<= A.length
我不明白两者之间的区别。如果数组表示堆,为什么A.heap-size
可能小于A.length
。我知道A.heap-size
表示堆内元素的数量,为什么它不完全只等于数组中的项数?
答案 0 :(得分:9)
只是为了扩大答案。进一步阅读那本书。
数组的 A.heap_size
是放置heap(max_heap或min_heap)结构元素的位置。它在排序或排队的范围内是有意义的。你是对的:这是堆内元素的数量,但仅在第一次迭代堆排序时等于A.length
。
在下一次迭代中,在将max_heap树(A[1]
)的根与A[i] = A[A.length]
(数组A中的最后一个元素)交换之后,A[1]
元素将是A的最后一个元素,A.heap_sort
值将减少1,max_heap结构应为max_heapified:A[Parent(i)] >= A[i]
,其中Parent(i)
返回堆树的i / 2。
答案 1 :(得分:7)
堆排序的不变量是n元素数组的前k个元素是k个最小元素上的堆,最后n个k元素是排序顺序中的n-k个最大元素。后面的元素是堆不占用整个数组的原因。
答案 2 :(得分:0)
答案 3 :(得分:0)
A.length给出数组元素的总数,而A.heap大小给出了按排序顺序排列的元素的数量,或者没有排在堆属性元素之外的元素........和A.长度-Ahe尺寸甚至现在甚至没有排序,并且将来必须排序。