zoukankan      html  css  js  c++  java
  • 选择排序 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;
    
        }
    
    };
  • 相关阅读:
    python 类C数组的两种形式:list -->内容可变, tuple --->内容不可变
    13、canvas操纵像素数据ImageData
    13、canvas操纵像素数据ImageData
    13、canvas操纵像素数据ImageData
    13、canvas操纵像素数据ImageData
    人工智能工程师学习路线
    人工智能工程师学习路线
    js数组排序和打乱
    js数组排序和打乱
    js数组排序和打乱
  • 原文地址:https://www.cnblogs.com/Bella2017/p/10126680.html
Copyright © 2011-2022 走看看