選擇排序 Selection Sort
阿新 • • 發佈:2018-12-16
選擇排序 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; } };