#include<stdio.h>
#include<stdlib.h>
void isift(int *p,int i,int n)
{
int j,t;
t=p[i];
j=2*(i+1)-1;
while(j<=n)
{
if((j<n)&&(p[j]<p[j+1]))j++;
if(t<p[j])
{
p[i]=p[j];
i=j;
j=2*(i+1)-1;
}
else j=n+1;
}
p[i]=t;
return;
}
void pihap(int *p,int n)
{
int i,mm,t;
mm=n/2;
for(i=mm-1;i>=0;i–)
isift(p,i,n-1);
for(i=n-1;i>=1;i–)
{
t=p[0];
p[0]=p[i];
p[i]=t;
isift(p,0,i-1);
}
return;
}
void main(int argc,char *argv[])
{
int i;
int data[32];
printf(“未排序:”);
for(i=0;i<32;i++)
printf(“%d,”,data[i]=rand()%100);
pihap(data,32);
printf(“\n已排序:”);
for(i=0;i<32;i++)
printf(“%d,”,data[i]);
}