1. 简介
选择排序是最简单,但是也是最没用 【时间复杂度O(n^2),不稳定】 的排序算法,也有优化空间。
算法步骤:
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
重复第二步,直到所有元素均排序完毕。
动画演示:
2. C++实现
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
template<typename T> // 使用模板
void selection_sort(std::vector<T>& arr){
// 从下标0开始向右找
for (int i = 0; i < arr.size() - 1; i++){
int min = i;
// 向右查找最小值的下标
for (int j = i + 1; j < arr.size(); j++){
// 从小到大进行排序
if (arr[j] < arr[min])
min = j;
}
// 交换
std::swap(arr[i], arr[min]);
}
}
int main(){
// 原始数组
vector<int> testArr{4,2,4,5,6,7,2,4,2,7,98,5,4,33,3};
// 打印排序前的数据
cout << "选择排序前:";
for(auto i:testArr){
cout << i << " ";
}
cout << endl;
// 进行排序
selection_sort(testArr);
// 打印排序后的结果
cout << "选择排序后:";
for(auto i:testArr){
cout << i << " ";
}
cout << endl;
return 0;
}
运行结果: