
一、选择排序的基本思想
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的中数据元素选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。
二、排序过程
例:定义一个数组 int a[5] = {5,3,7,2,4},要求利用选择排序的方法将数组从小到大排序。
- 遍历第一趟数组,从位置 0 开始,找出数组的最小值,与位置 0 的数据交换

- 遍历第二趟数组,从位置 1 开始,找出数组的最小值,与位置 1 的数据交换

- 遍历第三趟数组,从位置 2 开始,找出数组的最小值,与位置 2 的数据交换

- 遍历第四趟数组,从位置 3 开始,找出数组的最小值,与位置 3 的数据交换

- 经历上面的排序后,只剩最后一个元素,但是可以肯定的是这个元素是所有元素中最大的,那么到此这个数组就完成了排序。

三、代码实现
c++
void selection_sort(int arr[], int len)
{
for (int i = 0; i < len - 1; i++)
{
int min = i;
for (int j = i + 1; j < len; j++)
{
if (arr[j] < arr[min])
{
min = j;
}
}
std::swap(arr[i], arr[min]);
}
}