选择排序(Selection Sort)就是通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小(大)的记录,并和第i(1<=i<=n)个记录交换。选择排序是非稳定排序。
简单说就是每一轮循环,选出元素中最小(大)的元素,放在每轮循环的第一位,因为每次循环都能确定一个最小(大)的元素,所以每下一次循环都要排除已经确定的元素,即从n-i+1个记录中选出最小(大)的元素。
#include<iostream>
#include<vector>
using namespace std;
//选择排序
void SelectionSort(vector<int>&v, int len) {
int minIndex;
for (int i = 0; i < len; i++) {
minIndex = i;//最小值下标
for (int j = i + 1; j < len; j++) {
if (v[minIndex] > v[j])
minIndex = j;
}
swap(v[i], v[minIndex]);
}
}
//遍历函数
void printVector(vector<int>&v) {
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
cout << *it << " ";
}
cout << endl;
}
int main() {
vector<int> v = { 5,8,9,2,4,7,3,0,1,3 };
SelectionSort(v, v.size());
printVector(v);
}
时间复杂度:O(n^2) 空间复杂度:O(1);