1. 选择排序是在每一次循环比较中找出最大的(或最小的),将其放在第一位。第一次循环时将第一个数据和其他的数据比较,如果后面的数据比第一个大(或小),就和第一个数据交换位置;之后进行第二次循环,将第二个数据与剩下的数据比较,找出最大的(或最小的)与第二个数据交换,以此类推。
2.要注意选择排序与冒泡排序不同的是,选择排序每次循环后i和j的初始值都要向前加1,即j的循环初始条件必须是i+1;而冒泡排序的循环初始条件是一定的。
3.利用模板时要注意确定t的数据类型。当函数模板没有可以使编译器推导出数据类型的数据时,在调用该函数时,需要指明数据类型,如调用函数模板func函数:
func<int>()
4.以下为利用函数模板对不同类型数组进行排序,排序规则从大到小。
#include<iostream>
using namespace std;
template<typename t>
void func2(t &a, t &b)
{
t c = a;
a = b;
b = c;
}
template<typename t>
void func1(t a[], int num)
{
for (int i = 0;i < num;i++)
{
int max = i;
for (int j = i+1;j < num;j++)//选择排序每次循环后,i和j的值都需要加1,所以j的循环条件必须设为j+1
{
if (a[max] < a[j])
{
max = j;
}
}
if (max != i)
{
func2(a[max], a[i]);
}
}
}
template<typename t>
void func3(t a[], int num)
{
for (int i = 0;i < num;i++)
{
cout << a[i] << " ";
}
cout << endl;
}
void test1()
{
char a[] = { 'a','d','f','c','e','b' };
int num = sizeof(a) / sizeof(char);
func1(a, num);
func3(a, num);
}
void test2()
{
int b[] = { 4,2,5,3,1 };
int num = sizeof(b) / sizeof(int);
func1(b, num);
func3(b, num);
}
int main()
{
test1();
test2();
system("pause");
return 0;
}