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;
}
#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;
}
相关文章推荐
- C++ STL
- C++ STL之查找算法
- [C++::STL]之set的用法
- c++ stl set
- [C++ 从入门到放弃-08]C++STL之stack堆栈容器
- C++ STL优先队列(STL堆)
- C++ STL lower_bound 和 upper_bound
- C++ STL priority_queue
- C++ STL list 成员函数 sort算法分析
- 转 C++STL之string
- C++ STL轻松导学
- C++ STL
- 【C++ STL应用与实现】56: 使用std::unique删除重复元素
- 关于C++的STL学习
- [转贴]从零开始学C++之STL(一):STL六大组件简介
- C++ STL : std::map
- C++ STL 之 BitSet
- [置顶] C++_STL基础易学教程_【ORZ式教学】
- 读书笔记之:C++ STL 开发技术导引-2
- 从零开始学C++之STL(四):算法简介、7种算法分类