输入
第一行输入一个整数n(1≤n≤100),第二行输入n个整数。
4
8 7 2 1
输出
输出若干行,每行是一趟排序后的结果,每行的每两个数据之间留一个空格。
7 1 2 8
2 1 7 8
1 2 7 8
代码
#include <bits/stdc++.h>
using namespace std;
int n,a[105];
void print() {
for (int i = 0; i < n; i++)
cout << a[i] << " ";
cout << endl;
}
void sift(int i, int n) {
int largest = i;
int lson = i * 2 + 1;
int rson = i * 2 + 2;
if (a[largest] < a[lson] && lson<n) {
largest = lson;
}
if (a[largest] < a[rson] && rson<n) {
largest = rson;
}
if (i != largest) {
swap(a[i], a[largest]);
sift(i, n);
}
}
void head_sort(int a[], int n) {
//建堆
for (int i = n / 2 - 1; i >=0; i--) {
sift(i, n);
}
//排序
for (int k = n - 1; k >0; k--) {
swap(a[0], a[k]);
sift(0, k);
print();
}
}
int main() {
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
head_sort(a, n);
}
参考 B站堆排序讲解