选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间。
算法步骤
-
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置
-
再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
-
重复第二步,直到所有元素均排序完毕。
排序动画过程解释
-
线性搜索数列并找到最小值,此时找到了为 2
-
将最小值替换为数列中左端的数字,即将 2 与 4 进行交换
-
此时 2 已经排序好
-
继续线性搜索剩余数列找到最小值,此时找到了 3
-
将最小值替换为数列中左端的数字,即将 3 与 4 进行交换
-
此时 2 与 3 已经排序好
-
继续线性搜索剩余数列找到最小值,此时找到了 4
-
如果最小值已经在左端,那么不执行任何操作,所以此时不做任何处理
-
此时 2 、 3 、 4 已经排序好
-
重复相同操作,直到所有数字都被排序
代码实现
#include<iostream> using namespace std; void selectionSort(int arr[], int n) { for (int i = 0; i < n; i++) { int minIndex = i; for (int j = i + 1; j < n; j++) { if (arr[j]<arr[minIndex]) { minIndex = j; } swap(arr[i], arr[minIndex]); } } }