选择排序 Selection Sort

选择排序 Selection Sort

1)在数组中找最小的数与第一个位置上的数交换;

2)找第二小的数与第二个位置上的数交换;

3)以此类推

template<typename T>      //泛型
void selectionSort(T arr[], int n){
    //数组arr 个数n
    for(int i=0;i<n;i++){
        //寻找[i,n)区间里的最小值
        int minIndex = i;
        for(int j = i+1;j<n;j++){
            if(arr[j] < arr[minIndex])
            //minIndex 中储存最小元素的下标
                minIndex = j;
        swap(arr[i], arr[minIndex]);
        }
    }    
}

 完整代码:

#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.h

#include <iostream>

#include <string>



using namespace std;





struct Student{



    string name;

    int score;



    // 重载小于运算法,定义Student之间的比较方式

    // 如果分数相等,则按照名字的字母序排序

    // 如果分数不等,则分数高的靠前

    bool operator<(const Student& otherStudent){

        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;

    }

};

猜你喜欢

转载自www.cnblogs.com/Bella2017/p/10126680.html
今日推荐