码迷,mamicode.com
首页 > 编程语言 > 详细

堆排序的基本实现

时间:2016-04-07 01:39:03      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:排序算法


void AdjustHeap(int *a, int size,int root)//建最大堆

{

if (a == NULL )

{

return;

}

int child = root*2+1;


while (child<size)

{

if ((child + 1) < size && a[child] < a[child + 1])

{

++child;

}

if (a[root]<a[child])

{

swap(a[child], a[root]);

}

root = child;

child = root * 2 + 1;

}

}

void Adjustdown(int *a, int size, int root)//向下调整,将堆顶的数据换到堆底后把长度减一;

{                            //再将堆顶数据向下比较,建成最大堆     

int child = root * 2 + 1;


while (child < size)

{

if ((child + 1) < size && a[child] < a[child + 1])

{

++child;

}

if (a[child] > a[root])

{

swap(a[child], a[root]);

}

root = child;

child = root * 2 + 1;

}

}

void HeapSort(int *a,int length)

{

if (a == NULL || length <= 0)

{

return;

}

for (int i = (length - 2) / 2; i >= 0; i--)

{

AdjustHeap(a, length, i);

}

for (int i = length - 1; i > 0; i--)

{

int tmp = a[0];

a[0] = a[i];

a[i] = tmp;

Adjustdown(a, i, 0);

}

}


堆排序的基本实现

标签:排序算法

原文地址:http://zheng2048.blog.51cto.com/10612048/1761095

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!