选择排序法是一种简单直观的排序算法,其基本思想是 每一次从未排序的部分中找到最小(或最大)的元素,将其放到已排序部分的末尾。通过多次交换,最终得到一个有序的序列。选择排序的工作原理可以类比为整理书架,先选出最喜欢的一本书放到最前面,然后在剩下的书里再选出一本最喜欢的放到第二位,依此类推,直到所有的书都按顺序排列好了。
具体步骤如下:
初始状态:
假设有一个未排序的数组,已排序部分最初为空,而未排序部分则包含整个数组。
寻找最小元素:
在未排序部分中找到最小(或最大)的元素。
交换位置:
将这个最小值与当前未排序部分的第一个元素交换。
重复步骤:
缩小未排序的范围,重复上述步骤直到所有元素有序。
选择排序的时间复杂度为 O(n²),是一个不稳定的排序算法。
示例
假设有一个数组 `arr = [5, 4, 3, 2, 1]`,选择排序的过程如下:
1. 初始状态:`arr = [5, 4, 3, 2, 1]`,已排序部分为空,未排序部分为 `[5, 4, 3, 2, 1]`。
2. 第一次选择:找到最小值 `1`,与 `arr` 交换,得到 `arr = [1, 4, 3, 2, 5]`。
3. 第二次选择:在剩下的 `[4, 3, 2, 5]` 中找到最小值 `2`,与 `arr` 交换,得到 `arr = [1, 2, 3, 4, 5]`。
4. 第三次选择:在剩下的 `[3, 4, 5]` 中找到最小值 `3`,与 `arr` 交换,得到 `arr = [1, 2, 3, 4, 5]`。
5. 第四次选择:在剩下的 `[4, 5]` 中找到最小值 `4`,与 `arr` 交换,得到 `arr = [1, 2, 3, 4, 5]`。
6. 第五次选择:在剩下的 `` 中找到最小值 `5`,与 `arr` 交换,得到 `arr = [1, 2, 3, 4, 5]`。
最终,数组 `arr` 变为有序序列 `[1, 2, 3, 4, 5]`。