//建堆,运行时间的界T(n) =O(N)
BuildHeap(A)
n = length(A)
for i = n/2 downto 1 do //从非叶子节点开始,自底往上,使A变成最大堆
Max_Heapify(A, i, n)
end
//调整为最大堆 ,T(n) = O(lgn)
Max_Heapify(A,idx,max) //idx:数组开始的下标,max:最大的数组下标
left = 2*idx
right = 2*idx
if(left<max and A[left]>A[idx]) then
largest = left
else
largest = idx
if(right < max and A[right]>A[largest]) then
largest = ritht
if(largest != idx) then
exchange A[largest] with A[idx]
Max_Heapify(A,largest,max) //交换位置后,还需要调整它的子树
end
HeapSort(A)
BuildHeap(A)
for i = length(A) downto 2 do
exchange A[1] with A[i] //把最大堆根节点与最后一个互换
Max_Heapify(A,1, i-1) //把交互后的排除在堆之外,重新从1到i-1,调整堆
end
堆排序伪代码
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 堆排序 (二叉)堆是一个数组,它可以被看成一个近似的完全二叉树。树上的每一个结点对应数组中的一个元素。除了最底层外...
- 正文前的扯淡 之前电话面试一个公司时,面试官让写一个堆排序,遗憾的是我忘了堆排序的思想了,所以直接说不会写,这次电...
- 你见过温柔得像牛奶一样的女生吗? 我见过,准妈妈登婷就是那样子的。 登婷甜甜的声音里没有波澜壮阔,却满是风平浪静的...