给定一个整数序列,请按非递减序输出采用堆排序的各趟排序后的结果。
输入格式:
测试数据有多组,处理到文件尾。每组测试数据第一行输入一个整数n(1≤n≤100),第二行输入n个整数。
输出格式:
对于每组测试,输出若干行,每行是一趟排序后的结果,每行的每两个数据之间留一个空格。
输入样例:
4
8 7 2 1
输出样例:
7 1 2 8
2 1 7 8
1 2 7 8
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define MAXDATA 100
void Swap(int* a, int* b) {
int temp = *a; *a = *b; *b = temp;
}
void PercDown(int* A, int p, int N) {
int Parent, Child;
int X;
X = A[p];
for (Parent = p; Parent * 2 <= N; Parent = Child) {
Child = Parent * 2;
if ((Child != N) && (A[Child] < A[Child + 1]))
Child++;
if (X >= A[Child])break;
else
A[Parent] = A[Child];
}
A[Parent] = X;
}
void HeapSort(int A[], int N) {
int i, j, temp;
for (i = N / 2; i >= 1; i--)
PercDown(A, i, N);
for (i = N; i > 1; i--) {
Swap(&A[1], &A[i]);
PercDown(A, 1, i - 1);
for (j = 1; j <= N; j++) {
printf("%d", A[j]);
if (j != N)printf(" ");
}
printf("\n");
}
}
int main() {
int A[MAXDATA];
int N, i;
scanf("%d", &N);
for (i = 1; i <= N; i++)
scanf("%d", &A[i]);
HeapSort(A, N);
system("pause");
return 0;
}