/*
选择排序:每次从待排元素中选择最小(或最大)的一个元素,放到待排元素的最前面,直到排序完成。
由于选择最小(或最大)元素时,该元素和待排的第一位元素交换,所以选择排序 不稳定。例子:5 7 5 3 9
时间复杂度:O(n^2)
空间复杂度:O(1)
*/
#include<iostream>
using namespace std;
int a[] = { 3,5,2,4,6,8,9,7,1 }; //给定数组
int len = 9; //直接给出长度
int main() {
//选择排序
int k; //用于存储最小值的下标
for (int i = 0; i < len; i++) {
k = i; //k从i向右查找
for (int j = i + 1; j < len; j++) {
if (a[j] < a[k]) { //如果有比a[k]小的数,则k更新为该下标
k = j;
}
if (k != i) { //如果存在比a[i]小的数则交换
swap(a[i], a[k]);
}
}
}
//打印输出
for (int i = 0; i < len - 1; i++) {
cout << a[i] << " ";
}
cout << a[len - 1] << endl;
return 0;
}