#include <bits/stdc++.h>
#define N 1000
using namespace std;
void max_heapify(int arr[], int left, int right)
{
int dad = left;
int son = dad * 2 + 1;
while( son <= right )
{
if( son + 1 <= right && arr[son] < arr[son + 1])
son++;
if( arr[dad] > arr[son] )
return ;
else
{
swap(arr[dad],arr[son]);
dad = son;
son = dad * 2 + 1;
}
}
}
void heap_sort(int arr[],int len)
{
int i;
for( i = len / 2 - 1; i >= 0; i-- )
max_heapify(arr, i, len - 1);
for( i = len - 1; i > 0; i--)
{
swap(arr[0], arr[i]);
max_heapify(arr, 0, i - 1);
}
}
int main()
{
int n;
int arr[N];
cin>>n;
for(int i = 0; i < n; i++)
cin>>arr[i];
heap_sort(arr,n);
for(int i = 0; i < n; i++)
cout<<arr[i]<<' ';
return 0;
}
堆排序的模板
最新推荐文章于 2023-12-28 21:03:24 发布