欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c++实现堆排序教程

程序员文章站 2022-06-27 22:49:50
这是算法导论上的例题 可以参考以下伪代码 c++代码 #include using namespace std; //交换两数大小 void exc...

这是算法导论上的例题

可以参考以下伪代码

c++实现堆排序教程

c++实现堆排序教程

c++实现堆排序教程

c++代码

#include
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(larray[largest])
        largest=l;
    if(rarray[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<<"原始堆为:"<

运行结果

c++实现堆排序教程