此题很水,主要是为了练习堆排序,很多排序方法都可行。
数组从0-n-1,一直WA,然后数组换成1-n就过了,不知原因在哪,还得看看
代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int array[1011];
void Heap_Adjust(int array[],int start,int end)
{
int i;
int temp;
temp=array[start];
for(i=2*start;i<=end;i*=2)
{
if(i<end && array[i]<array[i+1])
{
i++;
}
if(temp>=array[i]) break;
array[start]=array[i];
start=i;
}
array[start]=temp;
}
void Heap_Sort(int array[],int n)
{
int i;
int temp;
for(i=n/2;i>=1;i--)
{
Heap_Adjust(array,i,n);
}
for(i=n;i>1;i--)
{
temp=array[1];
array[1]=array[i];
array[i]=temp;
Heap_Adjust(array,1,i-1);
}
}
int main()
{
int T,n,i;
while(scanf("%d",&T)!=EOF)
{
while(T--)
{
scanf("%d",&n);
memset(array,0,sizeof(array));
for(i=1;i<=n;i++)
scanf("%d",&array[i]);
Heap_Sort(array,n);
for(i=1;i<=n-1;i++) printf("%d ",array[i]);
printf("%d\n",array[n]);
}
}
return 0;
}