最简单,每次将“剩余”元素中的最小者换到剩余元素的首位,n次即可完成排序。
Θ(n^2),即稳定的n方复杂度,与输入无关,还不能优化,效率垫底。
#include<iostream>
#include<vector>
using namespace std;
void selectionsort_C(int a[],int n) { //C风格数组版
for (int i = 0; i < n; i++) { //双重循环3行完事,清爽!
for (int j =i; j < n; j++) { //从i=j开始,就是说已经排好的前j个就不再参加循环了
if (a[j] < a[i]) swap(a[i], a[j]);
}
}
}
//C++风格版:
void selectionsort(vector<int>& a) { //注意是&a,否则排序结果传不出去
for (auto pos1 = a.begin(); pos1 != a.end(); pos1++) {
for (auto pos2 = pos1; pos2 != a.end(); pos2++)
if (*pos2 < *pos1)swap(*pos2, *pos1);
}
}
int main() { //测试
vector<int> a{ 9,8,7,6,5,4,3,2,1,0 };
selectionsort(a);
for (auto& e : a)cout << e;
cout << endl;
}