C++ 简单选择排序函数的两种函数模板

  这里只讨论利用函数模板对数组的元素进行从小到大的排序,首先是视频教程里的函数模板头文件header_9_12.h:

#ifndef HEADER_9_12_H
#define HEADER_9_12_H

//辅助函数:交换x和y的值
template <class T>
void mySwap(T &x, T &y) {
    T temp = x;
    x = y;
    y = temp;
}

//用选择法对数组a的n个元素进行排序
template <class T>
void selectionSort(T a[], int n) {
    for (int i = 0; i < n - 1; i++) {
        int leastIndex = i; //最小元素之下标初值设为i
        for (int j = i + 1; j < n; j++) //在元素a[i + 1]..a[n - 1]中逐个比较显出最小值
        if (a[j] < a[leastIndex])   //smallIndex始终记录当前找到的最小值的下标
            leastIndex = j;
        mySwap(a[i], a[leastIndex]);    //将这一趟找到的最小元素与a[i]交换
    }
}
#endif  //HEADER_9_12_H

  主函数就简单定义一个一维数组a[10]:

#include <iostream>
#include "Header_9_12.h"
//#include "header_2.h"
using namespace std;

int main(){
    int a[10] = { 31, 5, 13, 8, 12, 5, 23, 4, 6, 10 };
    selectionSort<int> (a, 10);
    for (int i = 0; i < 10; i++){
        cout << a[i] << endl;
    }
    return 0;
}

  主函数可以实现,但是笔者觉得头文件代码还有简化的空间,于是再定义一个简化的函数模板头文件header_2.h:

#ifndef HEADER_2_H
#define HEADER_2_H

//用选择法对数组a的n个元素进行排序
template <class T>
void selectionSort(T a[], int n) {
    int temp = 0;
    for (int i = 0; i < n - 1; i++){
        for (int j = i + 1; j < n; j++){
            if (a[j] < a[i]){
                temp = a[j];
                a[j] = a[i];
                a[i] = temp;
            }
        }
    }
}
#endif  //HEADER_2_H

  之后在主函数头包含头文件"header_2.h",隐藏头文件"Header_9_12.h",成功运行。

总结:
  虽然改进后的头文件代码比原先的头文件代码要少,但其实仅仅是把独立出来的交换函数mySwap的函数体放回到了selectionSort函数体中,对于编译器来说,这两个头文件执行的效率其实是一样的。

  如果一个函数体中要进行很多的元素之间的值交换,那么就需要把交换的代码独立出来写一个交换函数。这样的话,原先函数的函数体代码就会更加简洁美观(对于编译器来说执行效率是没差的)。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...
    SeanCST阅读 12,370评论 0 27
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,796评论 1 32
  • 1.面向对象的程序设计思想是什么? 答:把数据结构和对数据结构进行操作的方法封装形成一个个的对象。 2.什么是类?...
    少帅yangjie阅读 10,437评论 0 14
  • 问题 做的读书笔记没有条理,想到哪里写到哪里。 解决办法 做结构化的读书笔记,如附件所示https://pan.b...
    鸭梨山大哎阅读 2,726评论 0 1
  • 鱼儿水里游,云在天上走,在自然灵动的姿势变换里,画出优雅美丽的弧线,每每看到这样的景象,不禁嘴角上扬,静立观赏也可...
    晁一飒阅读 1,716评论 0 0