之前写过一篇博客是教你几种基本的常见排序算法 ,就说到会有后续的文章出来,继续写写排序问题,参加一些公司的电话面试,还总是会问到写关于排序的问题,大多是关于堆排序,快排序或者海量数据排序,或者从很到的数字序列中找到些中间位置的数字,或者是前K个最小的数字等相关问题,今天正好有空写了写堆排序的代码,自己存储一下,也拿出来共享给大家!
堆排序的算法思路,网上一搜索一堆,本科的课本里面也有较为详细的讲解,这里直接拿出代码,供大家参考!高手可以直接略过,小弟这厢礼过去了~~~!!
#include <iostream>
using namespace std;
template<class Any>
void SwapData(Any &a,Any &b)
{
Any tmp=a;
a=b;
b=tmp;
}
template<class AnyType>
void CreateHeap(AnyType array[],int sPoint,int len)
{
while((2*sPoint+1)<len)
{
int mPoint=2*sPoint+1;
if((2*sPoint+2)<len)
{
if(array[2*sPoint+1]<array[2*sPoint+2])
mPoint=2*sPoint+2;
}
if(array[sPoint]<array[mPoint])
{
SwapData(array[sPoint],array[mPoint]);
sPoint=mPoint;
}
else
break;
}
return ;
}
template<class AnyType>
void HeadpSort(AnyType array[],int len)
{
for(int i=(len/2-1);i>=0;i--)
CreateHeap(array,i,len);
for(int j=len-1;j>0;j--)
{
SwapData(array[0],array[j]);
CreateHeap(array,0,j);
}
return ;
}
template<class AnyType>
void OutPut(AnyType array,int len)
{
cout << array[0];
for(int i=1;i<len;i++)
cout << " " << array[i];
cout << endl;
}
int main()
{
int array[]={5,4,7,3,9,1,8,6,10,2};
HeadpSort(array,sizeof(array)/sizeof(int));
OutPut(array,sizeof(array)/sizeof(int));
return 0;
}
原文地址:http://blog.csdn.net/berguiliu/article/details/44522933