#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;
}
堆排序的模板
最新推荐文章于 2025-10-26 17:33:44 发布
本文详细介绍了一种高效的排序算法——堆排序的实现过程。通过使用C++编程语言,演示了如何构建最大堆,并利用堆调整来完成数组排序。该算法首先构建初始最大堆,然后反复将堆顶元素与末尾元素交换并进行堆调整,直至整个数组有序。
1589

被折叠的 条评论
为什么被折叠?



