您的位置:首页 > 其它

算法储备之堆排序

2017-10-18 12:25 155 查看
调整堆函数:

void HeapAdjust(int * pArr, int parent, int length)
{
int temp = pArr[parent];
int child = 2 * parent + 1;

while (parent < length / 2)
{
if (child + 1 < length && pArr[child] < pArr[child + 1])
child++;
if (pArr[child] <= temp)
break;
pArr[parent] = pArr[child];               //调整父子结点之后,可能会对子节点为根的树产生影响,循环调整至满足条件
parent = child;
child = 2 * parent + 1;
}
pArr[parent] = temp;
}


堆排序函数:

void HeapSort(int * pArr,int length)
{
int i;
int temp;
for (i = length / 2 - 1;i >= 0;i--) //初始化堆
HeapAdjust(pArr, i, length);

for (i = length - 1;i > 0;i--) //将堆首尾元素交换位置,重新调整[0-length-1]堆结构。
{
temp = pArr[0];
pArr[0] = pArr[i];
pArr[i] = temp;
HeapAdjust(pArr, 0, i);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: