C/C++中的 堆排序演算法 STL

來源:互聯網
上載者:User
#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;
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.