美文网首页算法的阶梯
c++ STL---selectionSort improve

c++ STL---selectionSort improve

作者: Tedisaname | 来源:发表于2018-11-03 10:52 被阅读8次

    使用c++的模板函数库中的库函数,外加自己书写的辅助函数进行选择排序的测试。

    可以自己创建一个.h文件,文件中书写自己可能用的到的方法,在此我书写了一个结构体函数,和输出函数的.h文件,来帮助我完成selectionSort函数的测试。

    //student.h file
    
    //宏定义  为了解决.h文件的多重引用问题 
    #ifndef SELECTIONSORT_SORTTESTHELPER_H
    #define SELECTIONSORT_SORTTESTHELPER_H
    
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    namespace student{
    struct Student{
        string name;
        int score;
        
        bool operator< (const Student &otherStudent) {
    //      return score < otherStudent.score;//分数按照从小到大进行比较 
    //      return score > otherStudent.score;//分数按照从大到小进行比较 
    
            //比较两个学生的成绩是否相同,不相同的话按照分数从大到校排序,否则的话按照名称的Ascii顺序进行排序 
            return score != otherStudent.score ? score > otherStudent.score : 
    name < otherStudent.name;
        }
        
        friend ostream& operator<<(ostream &os,const Student &student)
        {
            os << "Student:" << student.name << " " <<student.score << endl;
            return os;
        }
    };
    
        template<typename T>
        void printArr(T arr[],int n){
            for(int i = 0; i < n; i++)
                cout << arr[i] << " ";
            cout << endl;
            return;
        }   
    }
    
    #endif //SELECTIONSORT_SORTTESTHELPER_H
    
    
    //test driver program
    #include <iostream>   //cin,cout
    #include <algorithm>  //swap
    #include "student.h"//自定义.h文件
    using namespace std;
    
    template <typename T>  //泛型,是函数更通用
    void selectionSort(T a[],int n)
    {//寻找[i,n)区间里的最小值 
        int minIndex;
        
        for(int i = 0; i < n-1; i++){
            minIndex = i;
            for(int j = i + 1; j < n; j++){
                if(a[j] < a[minIndex])
                    minIndex = j;
            }
            swap(a[i],a[minIndex]); //swap the numbers
        }
    
    }
    int main()
    {
        //test integer
        int arr[10] = {10,9,8,7,6,5,4,3,2,1}; 
        selectionSort(arr,10);
        student::printArr(arr,10);//print out the elements of the array
        
        //test float
        float b[4] = {4.4,3.3,2.2,1.1};
        selectionSort(b,4);
        student::printArr(b,4);//print out the elements of the array
        
        //test string
        string c[4] = {"D","C","B","A"};
        selectionSort(c,4);
        student::printArr(c,4);//print out the elements of the array
        
        //test self defination
        student::Student d[4] = {{"D",90},{"C",100},{"B",95},{"A",95}};//Reference the structment through student.h 
        selectionSort(d,4); 
        student::printArr(d,4); //Reference to print out
        return 0;
    }
    

    You can leave me a message if you find out any mistake in my diary, I'll correct it, thanks.

    相关文章

      网友评论

        本文标题:c++ STL---selectionSort improve

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