对于堆排序算法的理解

it2022-05-09  29

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


最新回复(0)