昨天忘发了,现在补上。
#include "stdio.h"
#include "stdlib.h"
#define Num 10
void MinHeapFixdown(int a[], int i, int n)
{
int j, temp;
temp = a[i];
j = 2 * i + 1;
while (j < n)
{
if (j + 1 < n && a[j + 1] < a[j])
j++;
if (a[j] >= temp)
break;
a[i] = a[j];
i = j;
j = 2 * i + 1;
}
a[i] = temp;
}
void MakeMinHeap(int a[], int n)
{
int i;
for (i = n / 2 - 1; i >= 0; i--)
{
MinHeapFixdown(a, i, n);
}
}
void MinHeapDeleteNumber(int a[], int n)
{
int temp;
temp=a[n-1];
a[n-1]=a[0];
a[0]=temp;
}
void main()
{
int arr[Num]={10,29,8,7,6,5,4,3,2,1};
int i,k,temp,n=Num;
for(k=n;k>0;k--)
{
MakeMinHeap(arr,k);
MinHeapDeleteNumber(arr,k);
}
for(i=0;i<Num;i++)
{
printf("%d\n",arr[i]);
}
}
代码引用了不少,自己改了改。引用于上一篇文章。