选择排序是一种简单直观的比较排序算法,其核心思想是从未排序的部分找出最小(或最大)元素,存放到排序序列的起始位置,然后从剩余未排序元素中继续寻找最小(或最大)元素,放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
算法步骤
1. 初始状态:整个数组被视为未排序部分。
2. 查找最小值:在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置。
3. 缩小范围:将已找到的最小(或最大)元素所在的位置视为已排序序列的一部分,并将其从未排序序列中移除。
4. 重复操作:重复步骤2和3,直到未排序序列为空。
例子
假设我们有一个数组 [64, 25, 12, 22, 11],使用选择排序进行升序排列的过程如下:
- 第一次遍历,找到最小值11,与第一个元素64交换,得到 [11, 25, 12, 22, 64]。
- 第二次遍历,在剩下的 [25, 12, 22, 64] 中找到最小值12,与第二个元素25交换,得到 [11, 12, 25, 22, 64]。
- 依次类推,最终得到有序数组 [11, 12, 22, 25, 64]。
特点
- 时间复杂度:O(n^2),其中n为数组长度。无论数据如何分布,选择排序的时间复杂度都是O(n^2)。
- 空间复杂度:O(1),因为只使用了常数个额外空间。
- 稳定性:选择排序不是稳定的排序算法。即相等的两个元素可能在排序过程中改变相对顺序。
尽管选择排序效率不高,但在一些小规模数据或者教学场景中仍然有其应用价值。它提供了一种基本的排序思路,有助于理解更复杂的排序算法。