PS:使用模板函数进行编程
子函数的编写
template<class T>
void heap_sort(T*array,int length)
{
int i;
buildMaxHeap(array,length-1);
for(i=(length-1);i>=1;i--)
{
swap(&array[0],&array[i]);
heapSize--;
maxHeapify(array,0);
}
}
template<class T>
void buildMaxHeap(T*array,int length)
{
int i;
int heapSize = length;
for(i=(length>>1);i>=0;i--)
{
maxHeapify(array,i);
}
}
template<class T>
void maxHeapify(T*array;int index)
{
int largest = 0;
int left = 2*index+1;
int right = 2*index+2;
if((left<=heapSize)&&(array[left]>array[index]))
largest = left;
else
largest = index;
if((right<=heapSize)&&(array[right]>array[largest]))
largest = right;
if(largest!=index)
{
swap(&array[index],&array[largest]);
maxHeapify(array,largest);
}
}
测试代码
#include "stdafx.h"
#include<iostream>
using namespace std;
int heapSize =0;
int main()
{
float a[]={10,1.0,6,2,6.5,3,8,7,9,2};
heap_sort(a,10);
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
return 0;
}
运行结果