- 利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序
- 排序规则从大到小,排序算法为选择排序
- 分别利用char数组和int数组进行测试
第一版代码
#include
#include
using namespace std;
template//函数模板
void mySort(T arr[], int len)//选择排序算法(降序)
{
for ( int i = 0; i < len; i++ )
{
int max = i;//假定第一个数是最大的
for ( int j = i + 1; j < len; j++ )//让第一个数去和第二个、第三个、第四个....去比较
{
if (arr[max] < arr[j])//从大到小排序
{
max = j;//交换下标,一直保持max是最大的数的下标
}
}
if (max != i)//比较完一轮之后,发现最大的数不是i
{
//mySwap();//两个数交换,把最大的数放到最前边
int temp = arr[max];
arr[max] = arr[i];
arr[i] = temp;
}
//然后进行第二轮比较,最大的数已经排在第一个了,之后让第二个数去和第三个、第四个...去比较,这样循环下去,直到遍历完整个数组
}
}
int main()
{
int intarry[] = { 1,2,3,4,5,6,7 };
int intlen = sizeof(intarry) / sizeof(int);//计算数组的长度
mySort(intarry, intlen);
for (int i = 0; i < intlen; i++)//遍历输出数组元素
{
cout << intarry[i] << ",";
}
return 0;
}
第二版代码
#include
#include
using namespace std;
template//交换的函数模板
void mySwap(T& a, T& b)
{
T temp = a;
a = b;
b = temp;
}
template//排序的函数模板
void mySort(T arr[], int len)//选择排序算法(降序)
{
for ( int i = 0; i < len; i++ )
{
int max = i;//假定第一个数是最大的
for ( int j = i + 1; j < len; j++ )//让第一个数去和第二个、第三个、第四个....去比较
{
if (arr[max] < arr[j])//从大到小排序
{
max = j;//交换下标,一直保持max是最大的数的下标
}
}
if (max != i)//比较完一轮之后,发现最大的数不是i
{
mySwap(arr[i],arr[max]);//两个数交换,把最大的数放到最前边
}
//然后进行第二轮比较,最大的数已经排在第一个了,之后让第二个数去和第三个、第四个...去比较,这样循环下去,直到遍历完整个数组
}
}
template//输出数组元素的函数模板
void printArry(T arr[], int len)
{
for (int i = 0; i < len; i++)
{
cout << arr[i] << " ";
}
cout << endl;
}
int main()
{
//整型数组
int intarry[] = { 1,2,3,4,5,6,7 };
int intlen = sizeof(intarry) / sizeof(int);//计算数组的长度
mySort(intarry, intlen);
printArry(intarry, intlen);
//字符型数组
char chararry[] = "abcdef";
int charlen = sizeof(chararry) / sizeof(char);
mySort(chararry, charlen);
printArry(chararry, charlen);
return 0;
}