郭雨 • 2年前
using namespace std;
void swap(int &a, int &b) {
int temp = a;
a = b;
b = temp;
}
void HeadAdjust(int A[], int k, int len) {
A[0] = A[k];
for (int i = 2 * k; i <= len; i *= 2) {
if (i < len && A[i] < A[i + 1])
i++;
if (A[0] >= A[i])
break;
else {
A[k] = A[i];
k = i;
}
}
A[k] = A[0];
}
void BuildMaxHeap(int A[], int len) {
for (int i = len / 2; i > 0; i--)
HeadAdjust(A, i, len);
}
void HeapSort(int A[], int len) {
BuildMaxHeap(A, len);
for (int i = len; i > 1; i--) {
swap(A[i], A[1]);
HeadAdjust(A, 1, i - 1);
}
}
int main() {
int n, A[1001], i, len;
while (cin >> n) {
for (i = 1; i <= n; i++)
cin >> A[i];
HeapSort(A, n);
for (int i = 1; i <= n; i++)
cout << A[i] << " ";
}
return 0;
}
评论:
请先登录,才能进行评论