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
转载于:https://www.cnblogs.com/feima-lxl/archive/2010/08/11/1797428.html