您的位置:首页 > 编程语言 > C语言/C++

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

2009-09-19 05:38 176 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: