这是算法导论上的例题
可以参考以下伪代码
c++代码
#include<iostream>
using namespace std;
//交换两数大小
void exchange(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}
//左孩子,右孩子
int left(int i)
{
return i*2;
}
int right(int i)
{
return i*2+1;
}
//维护最大堆的函数
void maxHeapify(int array[], int len, int i)
{
int l=left(i),r=right(i);
int largest =i;
if(l<len&&array[l]>array[largest])
largest=l;
if(r<len&&array[r]>array[largest])
largest=r;
if(largest!= i)
{
exchange(array[largest],array[i]);
maxHeapify(array,len,largest); // 递归调整
}
}
//排序
void heapSort(int array[],int size)
{
for(int i=size/2-1;i>=0;--i)
{
maxHeapify(array,size,i);
}
for(int i=size-1;i>=1;--i)
{
exchange(array[0], array[i]);
maxHeapify(array,i,0);
}
}
int main()
{
int Array[10] = {16,4,10,14,7,9,3,2,8,1};
cout<<"原始堆为:"<<endl;
for(int i=0;i<10;++i)
cout<<Array[i]<<" ";
heapSort(Array,10);
cout<<endl<<"经过维护后的最大堆为:"<<endl;
for(int i=0;i<10;++i)
cout<<Array[i]<<" ";
return 0;
}
运行结果
本文介绍了一种使用C++实现的堆排序算法,并详细展示了如何通过构建最大堆来完成数组的排序过程。该算法首先建立一个最大堆,然后通过不断交换堆顶元素与最后一个元素并重新调整堆结构来实现排序。
3385

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



