void dealHeap(int *p, int index, int count)
{
if (2*index + 2 > count)
return ;
int left = 2*index + 1;
int right = 2*index + 2;
int m = p[left] > p[right] ? left : right;
if (p[m] > p[index])
{
swap(&p[m], &p[index]);
dealHeap(p, m, count);
}
}
void createHeap(int *p, int count)
{
for (int i = count; i >= 0; i--)
{
dealHeap(p, i, count);
}
}
void heapSort(int *p, int count)
{
createHeap(p, count);
for (int i = count; i >= 0; i--)
{
dealHeap(p, 0, i);
if (i != 1)
swap(&p[0], &p[i]);
}
}
堆排序
最新推荐文章于 2025-03-24 22:59:14 发布