C++编程模版之通用的排序函数
下例来自于《完美C++(第5版)》
---Walter Savitch,Kenrick Mock著
薛正华,沈庚 韦远科译
1、//main.cpp
#include<iostream>
#include"sort.cpp"
using namespace std;
//排序算法之模版
template<class T>
void sort(T a[], int numberUsed);
//交换两个值之模版
template<class T>
void swapValues(T& variable1, T& variable2);
//数组中求最小值之模版
template<class T>
int indexOfSmallest(const T a[], int startIndex, int numberUsed);
int main()
{
int i;
int a[] = {9,8,6,5,4,7,0};
cout<<"Unsorted integers:\n";
for( i = 0; i < 7; i++ )
{
cout<<a[i]<<" ";
}
cout<<endl;
sort(a, 7);
cout<<"In sorted order the integers are:\n";
for( i = 0; i < 7; i++ )
{
cout<<a[i]<<" ";
}
cout<<endl<<endl;
double b[] = {5.4, 4.3, 6.1, 7.5, 3.4};
cout<<"Unsorted doubles:\n";
for( i = 0; i < 5; i++ )
{
cout<<b[i]<<" ";
}
cout<<endl;
sort(b, 5);
cout<<"In sorted order the doubles are:\n";
for( i = 0; i < 5; i++ )
{
cout<<b[i]<<" ";
}
cout<<endl;
return 0;
}
2、//sort.cpp
template<class T>
void sort(T a[], int numberUsed)
{
int indexOfNextSmallest;
for(int index = 0; index < numberUsed - 1; index++ )
{
indexOfNextSmallest = indexOfSmallest(a,index,numberUsed);
swapValues(a[index],a[indexOfNextSmallest]);
}
}
template<class T>
void swapValues( T& variable1, T& variable2)
{
T temp;
temp = variable1;
variable1 = variable2;
variable2 = temp;
}
template<class T>
int indexOfSmallest(const T a[], int startIndex, int numberUsed)
{
T min = a[startIndex];
int indexOfMin = startIndex;
for ( int index = startIndex + 1; index < numberUsed; index++ )
{
if( a[index] < min)
{
min = a[index];
indexOfMin = index;
}
}
return indexOfMin;
}
3、运行结果