注意理解用数组表示堆以及运用好递归。
#include <stdlib.h>
int a[] = {0,2,6,8,4,10};
void swap(int* a, int i, int j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
void HeapAdjust(int* a, int i, int size)
{
int lchild = 2 * i;
int rchild = 2 * i + 1;
int max = i;
if(i <= size / 2)
{
if(lchild <= size && a[lchild] > a[max])
{
max = lchild;
}
if(rchild <= size && a[rchild] > a[max])
{
max = rchild;
}
if(max != i)
{
swap(a, i, max);
HeapAdjust(a, max, size);
}
}
}
void BuildHeap(int* a, int size)
{
int i;
for(i = size/2; i >= 1; i--)
{
HeapAdjust(a, i, size);
}
}
void HeapSort(int* a, int size)
{
BuildHeap(a, size);
int i;
for(i = size; i >= 1; i--)
{
swap(a, 1, i);
HeapAdjust(a, 1, i - 1);
}
}
void print(int *a, int size)
{
int i;
for(i = 1; i <= size; i++)
{
printf(" %d ",a[i]);
}
}
int main()
{
HeapSort(a, 5);
print(a, 5);
}
4万+

被折叠的 条评论
为什么被折叠?



