#include "StdAfx.h"
#include "HeapSort.h"

void Swap_Value(int &lhs,int &rhs);

HeapSort::HeapSort(void)
{
}

HeapSort::~HeapSort(void)
{
}
void HeapSort::Heap_Sort_Init(std::vector<int> _Int_Vector, int _Vector_Size)
{
    for(int i=0;i<_Vector_Size;i++)
    {
        Int_Vector.push_back(_Int_Vector[i]);
    }
    Vector_Size=_Vector_Size;
}
void HeapSort::Heap_Sort_Run_Sort()
{
    //Construct the heap
    for(int i=(Vector_Size-2)/2;i>=0;i--)
    {
        Heap_Sort_FliterDown(i,Vector_Size-1);
    }
    //for sort
    for(int i=Vector_Size-1;i>0;i--)
    {
        //Save the value in the last element
        Swap_Value(Int_Vector[0],Int_Vector[i]);
        //adjust it to be a large root heap
        Heap_Sort_FliterDown(0,i-1);
    }

}
void  HeapSort::Heap_Sort_FliterDown(int _Current, int _Last)
{
    int Child=_Current*2+1;
    int TempValue=Int_Vector[_Current];
    while(Child<=_Last)
    {
        if(Child<_Last && Int_Vector[Child]<Int_Vector[Child+1])
        {
            //Save the bigger value
            Child++;
        }
        if(TempValue>=Int_Vector[Child])
        {
            break;
        }
        else
        {
            Int_Vector[_Current]=Int_Vector[Child];
            _Current=Child;
            Child=Child*2+1;
        }
    }
    Int_Vector[_Current]=TempValue;
}
void HeapSort::Heap_Sort_Output()
{
    for(int i=0;i< Int_Vector.size();i++)
    {
        cout<<Int_Vector[i]<<" ";
        if(i>5&&i%10==0)
            cout<<endl;
    }
    cout<<endl;
}

void Swap_Value(int &lhs,int &rhs)
{
    int temp=lhs;
    lhs=rhs;
    rhs=temp;
}
posted on 2009-09-19 05:38  AlexusLi  阅读(1364)  评论(0编辑  收藏  举报