选择排序(Selection Sort)
- 平均时间复杂度:O(n)
- 最好情况:O(n)
- 最坏情况:O(n)
- 空间复杂度:O(1)
- 排序方式:内部
-
C++代码实现
void selectionSort(vector<int>& arr) {int len=arr.size();int lhs = 0;int rhs = len - 1;while (lhs < rhs){int max = lhs;int min = lhs;int j = 0;for (j = lhs + 1; j <= rhs; j++) {min = arr[j] < arr[min] ? j : min;max = arr[j]>=arr[max] ? j : max;}if (min != lhs) {swap(arr[lhs], arr[min]);}//这里很重要,如果最大元素下标是lhs,//前面已经和最小元素交换了,//此时最大元素下标应该是minif (max == lhs) {max = min;}if (max != rhs) {swap(arr[rhs], arr[max]);}lhs ++;rhs--;}}
1. 算法步骤
- 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
- 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
- 重复第二步,直到所有元素均排序完毕。
优化步骤
① 每一次遍历同时排序两个值,一个最大值,一个最小值,减少遍历次数2. 动图演示(无优化)

