#include <iostream>
using namespace std;
int arr[1001];
int len;
void HeapAdjust(int s,int m)
{
int j;
int x = arr[s];
for(j = 2*s; j <= m; j*=2)
{
if(j < m && arr[j] < arr[j+1])j++;
if(x >= arr[j])break;
arr[s] = arr[j];
s = j;
}
arr[s] = x;
}
//建堆
void CreatHeap()
{
for(int i = len/2; i > 0; i--)
{
HeapAdjust(i,len);
}
}
//排序
void HeapSort()
{
CreatHeap();
int i,x;
for(i = len; i > 1; i--)
{
x = arr[1];
arr[1] = arr[i];
arr[i] = x;
HeapAdjust(1,i-1);
}
}
int main()
{
int i;
int T;
cin>>T;
while(T--)
{
memset(arr,0,sizeof(arr));
cin>>len;
for(i = 1; i <= len; i++)
{
cin>>arr[i];
}
//排序
HeapSort();
for(i = 0; i < len; i++)
{
cout<<arr[i];
if(i + 1 < len)cout<<" ";
}
cout<<endl;
}
return 0;
}
本文介绍了一种使用堆排序算法进行数组排序的实现方法。通过详细展示堆调整、建堆及排序过程的C++代码,帮助读者理解堆排序的工作原理。文章包含完整的程序代码,能够直接运行,适用于学习数据结构与算法的初学者。
1511

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



