堆排序实现

参考算法导论 p73

#include<iostream>
#include <algorithm>

using namespace std
void maxHeapify(int *a ,int i,int size)
{
    int max=i;
    if(2*i<=size&&a[2*i]>a[max])
        max = 2*i;
    if((2*i+1)<=size&&a[2*i+1]>a[max])
        max = 2*i+1;
    if(max!=i)
    {
        swap(a[max],a[i]);
        maxHeapify(a,max,size);
    }
}

void buildMaxHeap(int *a,int size)
{
    int i;
    for(i=size/2;i>=1;i--)
        maxHeapify(a,i,size);
}

void heapsort(int *a ,int size)
{
    if(size<=1)
        return;
    buildMaxHeap(a,size);
    swap(a[1],a[size]);
    heapsort(a,size-1);
}

void main()
{
    int a[200];
    int i;
    for(i=1;i<=100;i++)
        a[i]=rand();

    heapsort(a,100);

    for(i=1;i<=100;i++)
        printf("%d\n",a[i]);
}

 

posted on 2012-12-11 17:36  luckistmaomao  阅读(163)  评论(0编辑  收藏  举报

导航