您的位置:首页 > 其它

堆排序(大根堆)

2006-10-13 13:04 288 查看
#include "stdio.h"
bool MaxOrEqual(int a0,int a1)
{
    if(a0 < a1) return false;
    return true;
};
bool MaxOnly(int a0,int a1)
{
    if(a0 > a1) return true;
    return false;
};
void ChangeEach(int &A,int &B)
{
    int tt = A;
    A = B;
    B = tt;
};
int HeapifyBig(int T[],int N,int Cur)
{
    int child = Cur*2;
    if(child+1 <= N)//2 child
    {
        if( MaxOrEqual(T[child], T[child+1]) )
        {//first child bigger
            if( MaxOrEqual(T[child], T[Cur]) )
            {
                ChangeEach(T[child], T[Cur]);
                //return child;
                HeapifyBig( T , N,child);
            }
        }else
        {//second child bigger
            if( MaxOrEqual(T[child+1], T[Cur]) )
            {
                ChangeEach(T[child+1], T[Cur]);
                //return child+1;
                HeapifyBig( T , N,child+1);
            }
        }
    }
    else if(child <= N)// 1 child
    {
        if( MaxOrEqual(T[child], T[Cur]) )
        {
            ChangeEach(T[child], T[Cur]);
            //return child;
            HeapifyBig( T , N,child);
        }       
    }
    return -1;
};
//数组从一开始
void BuildHeap(int T[],int N)
{
    int i = N/2;//最后一个内点
    for(;i>0;i--)
    {
        HeapifyBig(T,N,i);
    }
   
   
};
void HeapSortBig(int T[],int N)
{
    BuildHeap(T, N);
    int i;
    for(i=N;i>0;)
    {
        ChangeEach(T[1],T[i]);
        i--;
        HeapifyBig(T,i,1);
    }
   
};

int main()
{
    int AA[256] ={-1,22,44,11,88,5,23,89,56,94,87};
    int NN = 9;
    int i;
    //test--------
    HeapSortBig( AA , NN);
    for(i=1;i<=NN;i++)
        printf("%d,",AA[i]);
    printf("/n");
    //test============
    return 0;
}
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  include