用模板编写选择排序函数,并分别用整型数组,浮点型数组,字符串型数组,以及自定义结构体Student型数组进行测试
main.cpp:
#include <iostream>
#include "Student.h"
using namespace std;
template<typename T>
void selectionSort(T arr[], int n){
for(int i = 0 ; i < n ; i ++){
int minIndex = i;
for( int j = i + 1 ; j < n ; j ++ )
if( arr[j] < arr[minIndex] )
minIndex = j;
swap( arr[i] , arr[minIndex] );
}
}
int main() {
// 测试模板函数,传入整型数组
int a[10] = {10,9,8,7,6,5,4,3,2,1};
selectionSort( a , 10 );
for( int i = 0 ; i < 10 ; i ++ )
cout<<a[i]<<" ";
cout<<endl;
// 测试模板函数,传入浮点数数组
float b[4] = {4.4,3.3,2.2,1.1};
selectionSort(b,4);
for( int i = 0 ; i < 4 ; i ++ )
cout<<b[i]<<" ";
cout<<endl;
// 测试模板函数,传入字符串数组
string c[4] = {"D","C","B","A"};
selectionSort(c,4);
for( int i = 0 ; i < 4 ; i ++ )
cout<<c[i]<<" ";
cout<<endl;
// 测试模板函数,传入自定义结构体Student数组
Student d[4] = { {"D",90} , {"C",100} , {"B",95} , {"A",95} };
selectionSort(d,4);
for( int i = 0 ; i < 4 ; i ++ )
cout<<d[i];
cout<<endl;
return 0;
}
//定义Student类型
temp.h:
#ifndef _TEMP_H
#define _TEMP_H
#include<iostream>
#include<string>
using namespace std;
struct Student{
string name;
int score;
//重载<运算符,当分数不同时选小的,当分数相同时,选name的字典序在前的。
bool operator < (const Student& otherStudent){
return score != otherStudent.score ? score < otherStudent.score : name < otherStudent.name;
}
friend operator << (ostream& os, const Student& student){
os << "Student: " << student.name << " " << student.score << endl;
}
};
#endif
运行截图:
另:
当我这样修改后,可以验证选择排序是不稳定的.
Student d[4] = { {"A",95} , {"C",100} , {"B",95} , {"D",90} };
结果是B在A的前面,是不稳定的.