题目:
设计一个支持整型、实型和字符型的气泡排序的函数模板。
代码:
//冒泡排序(函数模版)
//注意:T只能定义有多种可能类型的值,如i,j只能用int
#include <iostream>
using namespace std;
template <class T>
T sort(T a);
int main()
{
const int length = 1000; //可改
char a[length] = {0};
int i, n = 0;
cout << "冒泡排序(从小到大)" << endl << endl;
cout << "请输入要排序的数据的数量:";
cin >> n;
cout << "请输入要排序的数据:(彼此之间用空格隔开)";
for (i = 0; i < n; ++i) cin >> a[i];
sort(a);
cout << endl << "冒泡排序(从小到大)后的结果为:";
for (i = 0; i < n; ++i) cout << a[i] << " ";
cout << endl << endl;
system("pause");
return 0;
}
template <class T>
T sort(T a)
{
int i, j, tmp, len = strlen(a);
bool judge;
//用冒泡排序从小到大排序,因为它类似于贪婪法
for (j = 1; j <= len - 1; ++j)
{
judge = false; //重置judge
for (i = 0; i < len - j; ++i)
{
if (a[i] > a[i + 1])
{
tmp = a[i];
a[i] = a[i + 1];
a[i + 1] = tmp;
judge = true;
}
}
if (judge == false) break; //若本轮中没有发生交换,则提前退出
}
return a;
}