实验九 堆排序

#include<stdio.h>
#include<stdlib.h>
void sift(int *r,int k,int m) //调整堆
{ int i,j;
int x;
i=k; x=r[i]; j=2*i;
while(j<=m)
{ if((j<m)&&(r[j]>r[j+1]))
j++;
if(x>r[j])
{ r[i]=r[j]; i=j; j*=2; }
else j=m+1;
}
r[i]=x;
}

void HeapSort(int *r,int n) //堆排序
{ int i,x;
for(i=n/2;i>=1;i--)
sift(r,i,n);
for(i=n;i>=2;i--)
{ x=r[1];
r[1]=r[i];
r[i]=x;
sift(r,1,i-1);
}
}

int main()
{
int a[50],k=1,flag;
for(int i=2;i<=50;i++)
{
flag=0;
for(int j=2;j<i;j++)
{
if(i%j==0)
flag=1;
}
if(flag==0)
a[k++]=i;
}
printf("排序前: ");
for(int i=1;i<k;i++)
printf("%d ",a[i]);
printf(" ");
HeapSort(a,k-1);
printf("排序后: ");
for(int i=1;i<k;i++)
printf("%d ",a[i]);
printf(" ");

}

原文地址:https://www.cnblogs.com/accept/p/8175966.html