- 对选择排序的理解
每次选择最小的值往前放。
比如9,3,8排序:每次选择最小的数放在前面,第一次选3放在第一位,第二次选8放在第三位,第三次选择9放在第三位,直到排序结束。
代码:(举例int型数据排序)#include <iostream> #include <algorithm> using namespace std; void selectionSort(int arr[], int 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 = 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; return 0; }
- 使用模板(泛型)编写选择排序
Student.h:#ifndef INC_02_SELECTION_SORT_USING_TEMPLATE_STUDENT_H #define INC_02_SELECTION_SORT_USING_TEMPLATE_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; } }; #endif //INC_02_SELECTION_SORT_USING_TEMPLATE_STUDENT_H
main.cpp:
#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; }
原创文章,作者:wdmbts,如若转载,请注明出处:https://blog.ytso.com/275765.html