别的资源:http://blog.csdn.net/mishifangxiangdefeng/article/details/7668486
建立最大堆排序:
1.通过随机函数生成数,进行排序。
#include <iostream>
#include <cstdlib>
#include <time.h>
#define N 10
using namespace std;
template<typename arryType,size_t dim>void arry_random_init(arryType (&tem)[dim])
{
tem[0] = -1;
srand(unsigned (time(NULL)));
for(size_t i =1; i < dim; ++i)
tem[i] = rand() % N;
}
template<typename arryType,size_t dim>void arry_out(arryType (&tem)[dim])
{
int cnt = 0;
for(size_t i = 1;i < dim; ++i)
{
cout<<tem[i]<<" ";
cnt++;
if(cnt >= 10)
{
cnt %= 10;
cout<<endl;
}
}
cout<<endl;
}
template<typename arryType>void swap(arryType &x1, arryType &x2)
{
arryType temp_val = x1;
x1 = x2;
x2 = temp_val;
}
template<typename arryType,size_t dim>void heap_adjust(arryType (&tem)[dim], size_t low, size_t high)
{
arryType firstElem = tem[low];
for(size_t p = 2*low; p < high; p *= 2)
{
if(tem[p] < tem[p+1]) ++p;
if(tem[p] < firstElem) break;
tem[low] = tem[p];
low = p;
}
tem[low] = firstElem;
}
template<typename arryType,size_t dim>void heap_sort(arryType (&tem)[dim])
{
for(size_t i = (dim-1)/2; i >= 1; --i)
heap_adjust(tem,i,dim-1);
for(size_t j = dim-1; j>=1; --j)
{
arryType temp = tem[1];
tem[1] = tem[j];
tem[j] = temp;
heap_adjust(tem,1,j-1);
}
}
int main(int argc, char** argv[])
{
int elem[N];
arry_random_init(elem);
arry_out(elem);
heap_sort(elem);
arry_out(elem);
return 0;
}