美文网首页
2.使用模板(泛型)编写算法

2.使用模板(泛型)编写算法

作者: 村上果树 | 来源:发表于2018-02-24 22:25 被阅读0次

用模板编写选择排序函数,并分别用整型数组,浮点型数组,字符串型数组,以及自定义结构体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的前面,是不稳定的.

相关文章

  • 第二章:排序基础

    选择排序算法(selectionSort) 算法思想: 算法图示: 使用模板(泛型)编写算法:随机生成算法测试用例...

  • 2.使用模板(泛型)编写算法

    用模板编写选择排序函数,并分别用整型数组,浮点型数组,字符串型数组,以及自定义结构体Student型数组进行测试 ...

  • c++模板

    模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。可以使用模板来定义函数和类 函数模板 模板...

  • Geekband-third week of part3

    1.泛型算法之变易算法 2.泛型算法之排序 3.泛型算法之泛型数值算法 4.内存分配器

  • 廖雪峰Java读书笔记(四)--泛型

    1. 何谓泛型 泛型就是编写模板代码来适应任意类型; 泛型的好处是使用时不必对类型进行强制转换,它通过编译器对类型...

  • C++ 模版

    模版 模板是创建泛型类或函数的蓝图或公式。库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念 每...

  • android 源码阅读的C++语法准备7 模板 文件和流 ST

    模板 模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。 模板是创建泛型类或函数的蓝图或公式...

  • 1.3.05_C++ 模板

    模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。 模板是创建泛型类或函数的蓝图或公式。库容...

  • 2 排序基础 - 2使用模板(泛型)编写算法

    这一节我们主要在2 排序基础 - 1选择排序法基础上增添了模板: C++代码: Student.h: main.c...

  • 模板于数组应用之间的注意点

    模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。模板是创建泛型类或函数的蓝图或公式。库容器...

网友评论

      本文标题:2.使用模板(泛型)编写算法

      本文链接:https://www.haomeiwen.com/subject/pfmcxftx.html