1. 程式人生 > >選擇排序 Selection Sort

選擇排序 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;

    }

};