对于堆排序算法的理解
Q1.为什么HeapSort在创建初始堆时循环的索引是从n/2开始的
A1.因为堆排序的数据存储结构是数组:
若数组的索引从1开始,则若数组元素的个数为n,则以最后一个元素为左子节点的父节点的索引为n/2;依次类推,则以倒数第二个元素为左子节点的父元素的索引为n/2-1,...n/2-n/2-1;
若数组的索引从0开始,则若数组元素的个数为n,则以最后一个元素为左子节点的父节点的索引为n/2-1;依次类推,则以倒数第二个元素为左子节点的父元素的索引为n/2-2,...n/2-n/2;
若下标从1开始,则最后一个非叶子节点的索引为n/2(可通过绘制树形结构图来理解)。
创建初始堆就是通过遍历所有非叶子节点,把数组中的最大值调整到树根的位置,即把数组建成最大堆。
Q2.堆调整函数的理解?
A2.将指定根节点(父节点)的子树中的最大值调整到子树根节点的位置。
http://caterpillar.onlyfun.net/Gossip/AlgorithmGossip/HeapSort.htm
posted on 2010-08-11 16:32 LeeXiaoLiang 阅读(208) 评论(0) 编辑 收藏 举报