A.length和A.heap-size有什么区别?

时间:2013-09-27 20:46:42

标签: arrays algorithm data-structures heap

我对堆排序有疑问。它在算法书中说明A.heap-size<= A.length 我不明白两者之间的区别。如果数组表示堆,为什么A.heap-size可能小于A.length。我知道A.heap-size表示堆内元素的数量,为什么它不完全只等于数组中的项数?

4 个答案:

答案 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)

来自我正在使用的Cormen算法教科书: (这对我有帮助) enter image description here

答案 3 :(得分:0)

A.length给出数组元素的总数,而A.heap大小给出了按排序顺序排列的元素的数量,或者没有排在堆属性元素之外的元素........和A.长度-Ahe尺寸甚至现在甚至没有排序,并且将来必须排序。