丹东供求信息招聘网:c++函数模板的定义和使用方式

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/26 23:44:17

给你一个例子吧:
#include <iostream.h>

template <class SomeType>
void Swap (SomeType &a, SomeType &b)
{
SomeType tmp;
tmp = a;
a = b;
b = tmp;
}
template <class SomeType>
void Min(SomeType array[], long size, long start, long ¤tPosition)
{
if( currentPosition - start + 1 < size &&
array[currentPosition] > array[currentPosition + 1]
)
currentPosition = currentPosition + 1;
}

template <class SomeType>
void FilterDown(SomeType array[], long start, long size, long position)
{
long realPosition, relativePosition, offset;
relativePosition = position - start + 1;
offset = 2*relativePosition - 1;
realPosition = start + offset;
while(offset + 1 <= size)
{
Min(array, size, start,realPosition);
if(array[position] > array[realPosition])
Swap(array[realPosition], array[position]);
position = realPosition;
relativePosition = position - start + 1;
offset = 2*relativePosition - 1;
realPosition = start + offset;
}
}

template <class SomeType>
void BuildHeap(SomeType array[], long start, long size)
{
long filterDown;

for(filterDown = size/2 - 1; filterDown >= 0; filterDown --)
FilterDown(array, start, size, start + filterDown);
}

template <class SomeType>
void HeapSort(SomeType array[], long start, long size)
{
BuildHeap(array, start, size);

long numToBeSorted;
for(numToBeSorted = size - 1; numToBeSorted > 0; numToBeSorted --)
{
Swap(array[start], array[start + numToBeSorted]);
FilterDown(array, start, numToBeSorted, start);
}
}

int main()
{
int number;
int a[100], i;
cin >> number;
for(i = 0 ; i < number; i ++)
cin >> a[i];

HeapSort(a, 1, number - 1);

for(i = 0; i < number; i ++)
cout << a[i] << " ";
cout << endl;
return 0;
}

模板写的堆排序。