没有过程,先去复习了,有空补。。。。。。
void HeapAdjust(int data[],int s,int m)
{
data[0]=data[s];
int k=s,j=2*k;
while(j<=m)
{
if(data[j]>data[0])
{
if((j+1)<=m&&data[j+1]>data[j])
{
data[k]=data[j+1];
data[j+1]=data[0];
k=j+1;
}
else
{
data[k]=data[j];
data[j]=data[0];
k=j;
}
}
else
{
if((j+1)<=m&&data[j+1]>data[0])
{
data[k]=data[j+1];
data[j+1]=data[0];
k=j+1;
}
else break;
}
j=2*k;
}
}
void HeapSort(int data[])
{
for(int i=1;i<max;i++)
data[i]=rand()%100;
printf("\n堆排序:\n随机生成数据:\n");
for(int i=1;i<max;i++)
printf("%3d",data[i]);
int i;
for(i=(max-1)/2;i>=1;i--)
HeapAdjust(data,i,max-1);
printf("\n初始大顶堆:\n");
for(i=1;i<max;i++)
printf("%3d",data[i]);
for(i=max-1;i>1;i--)
{
data[0]=data[1];
data[1]=data[i];
data[i]=data[0];
HeapAdjust(data,1,i-1);
}
printf("\n最终结果:\n");
for(int i=1;i<max;i++)
printf("%3d",data[i]);
printf("\n");
}