#include<iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
void swap(int &a,int &b){
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
void max_heap(int *a,int i,int size){
int l = 2 * i;
int r = 2 * i + 1;
int largest;
if(l <= size && a[l] > a[i])
largest = l;
else
largest = i;
if( r <= size && a[r] > a[largest])
largest = r;
if(largest != i){
swap(a[largest],a[i]);
max_heap(a,largest,size);
}
}
void build_max_heap(int *a,int size){
for(int i = size / 2;i >= 1;i--)
max_heap(a,i,size);
}
void heap_sort(int *a,int size){
build_max_heap(a,size);
for(int i = size; i >= 2; i--){
swap(a[1],a[i]);
max_heap(a,1,i - 1);
}
}
int a[100];
int main()
{
int n;
while(cin >> n)
{
for(int i = 1;i <= n; i++)
cin >> a[i];
heap_sort(a,n);
for(int i = 1;i <= n; i++)
cout << a[i] << " ";
cout << endl;
}
return 0;
}
堆排序
最新推荐文章于 2023-09-21 13:21:58 发布