将选择排序算法变成模板函数,并且加入自定义类型Student
//main.cpp
#include <iostream>
#include <string>
#include "Student.h"
template<typename T>
void SelectSort(T arr[], int n)
{
//寻找[i,n)区间内的最小值
for (int i = 0; i < n; i++)
{
int index = i;
for (int j = i + 1; j < n; j++)
{
if (arr[j] < arr[index])
index = j;
}
if (index != i)
std::swap(arr[i], arr[index]);
}
}
template<typename T>
void PrintArr(T arr[], int n)
{
for (int i = 0; i < n; i++)
{
std::cout << arr[i] << " ";
}
std::cout << std::endl;
}
void PrintStudent(Student arr[], int n)
{
for (int i = 0; i < n; i++)
{
std::cout << arr[i];
}
}
int main()
{
int arr[] = { 10,9,8,7,6,5,4,3,2,1 };
SelectSort(arr, sizeof(arr) / sizeof(int));
PrintArr(arr, sizeof(arr) / sizeof(int));
double arr1[] = { 10.1,9.9,8.8,7.7,6};
SelectSort(arr1, sizeof(arr1) / sizeof(double));
PrintArr(arr1, sizeof(arr1) / sizeof(double));
std::string arr2[] = { "AA","B","BB","C","D" };
SelectSort(arr2, sizeof(arr2) / sizeof(std::string));
PrintArr(arr2, sizeof(arr2) / sizeof(std::string));
Student arr3[4] = { {"A",90},{ "B",80 },{ "C",95 },{ "D",60 } };
SelectSort(arr3, sizeof(arr3) / sizeof(Student));
PrintStudent(arr3, sizeof(arr3) / sizeof(Student));
system("pause");
return 0;
}
//Student.h
#ifndef __STUDENT_H
#define __STUDENT_H
#include <string>
struct Student
{
std::string name;
int score;
bool operator < (Student& s)
{
return score < s.score;
}
friend std::ostream& operator <<(std::ostream& os, Student s)
{
os << s.name << " " << s.score << std::endl;
return os;
}
};
#endif // !__STUDENT_H