2,设计一个类模板Sample,能实现对类型不限的数组的排序功能。求:
1)至少提供两种排序方法;
2)只允许提供一个sort函数接口来选择性调用指定排序方法(冒泡、选择或插入等等)和排序类型(升序或降序)。
怎么实现存储任意类型的数据啊,代码应该也有点问题
#include<iostream>
#include"Sample.h"
using namespace std;
template<typename T>
void Sample::Select(T a, int flag)
{
int i = 0;
T temp = 0;
int size = sizeof(a) / sizeof(T);
if (flag == 0)
{
for (i = 0;i < size;i++)
{
if (a[i] < a[i + 1])
{
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
}
}
else if (flag == 1)
{
for (int i = 0;i < size;i++)
{
if (a[i] > a[i + 1])
{
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
}
}
cout << "排序后:" << endl;
for (i = 0;i < size;i++)
cout << a[i] << " ";
cout << endl;
}
template<typename T>
void Sample::Bubble(T a, int flag)
{
int i, j = 0;
T temp = 0;
int size = sizeof(a) / sizeof(T);
for (i = 0;i < size;i++)
for (j = 0;j < size - i - 1;j++)
{
if (flag == 0)
{
if (a[j] < a[j + 1])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
if (flag == 1)
{
if (a[j] > a[j + 1])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
cout << "排序后:" << endl;
for (i = 0;i < size;i++)
cout << a[i] << " ";
cout << endl;
}
template<typename T>
void Sample::Sort(T a, int Choice1, int Choice2)
{
Sample sam;
if (Choice1 == 0)
sam.Select(a, Choice2);
if (Choice1 == 1)
sam.Bubble(a, Choice2);
}
int main()
{
//排序
/*int n = 0;
cout << "请输入您想排序的数据个数" << endl;*/
//cin >> n;
char cha[10000];
int n = 0;
int Choice1 = 0;
int Choice2 = 0;
cout << "请输入您想排序的序列" << endl;
/*while (cin.getline())
{
cin >> cha[n];
n++;
}*/
cin.getline(cha, 6);
cout << "您输入的序列为:" << endl;
for (int i = 0;i < 5;i++)
cout << cha[i] << " ";
cout << endl;
cout << "请选择排序方法:【0】选择排序 【1】冒泡排序" << endl;
cin >> Choice1;
cout << "请选择排序方法:【0】降序 【1】升序" << endl;
cin >> Choice2;
Sample::Sort(cha, Choice1, Choice2);
return 0;
}