就是一道简单的排序题,刚学了堆排序,就用堆排序做了。
#include <iostream>
using namespace std;
#include <stdio.h>
#define MAXN 1001
int min(int x, int y)
{
if(x < y)
return 1;
return 0;
}
void HeapAdjust(int a[], int s, int m)
{
int temp = a[s];
for(int j = 2*s; j <= m; j*=2)
{
if(j < m && min(a[j], a[j+1])) j++;
if(!min(temp, a[j])) break;
a[s] = a[j];
s = j;
}
a[s] = temp;
}
void HeapSort(int a[], int len)
{
int temp;
for(int i = len/2; i > 0; i--)
{
HeapAdjust(a, i, len);
}
for(int i = len; i > 0; i--)
{
temp = a[1];
a[1] = a[i];
a[i] = temp;
HeapAdjust(a, 1, i-1);
}
}
int main()
{
int n, m;
int a[MAXN];
scanf("%d", &n);
for(int i = 0; i < n; i++)
{
scanf("%d", &m);
for(int j = 1; j <= m; j++)
{
scanf("%d", &a[j]);
}
HeapSort(a, m);
for(int j = 1; j <= m; j++)
{
if(j == m)
{
printf("%d", a[j]);
}
else
printf("%d ", a[j]);
}
printf("\n");
}
return 0;
}