堆排序算法C源程序

5 11 月, 2009 by admin Leave a reply »

#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]);
}

Advertisement

发表回复

You must be logged in to post a comment.
鄂ICP备09027626号