不断从未排序区间筛选出最小的元素,放置于已排序区间队尾。

动画演示

selectionSort.gif

分析

  • 缺点

选择排序没有充分利用原始数据中的有序部分,每次都会找最小元素,然后进行交换。

  • 优点

数据的交换次数是所有排序算法中最少的,选择排序(Selection sort) - 图2次比较,选择排序(Selection sort) - 图3次数据交换。

  • 空间复杂度

是一种原地排序算法,空间复杂度为选择排序(Selection sort) - 图4

  • 时间复杂度

所有情况下均为选择排序(Selection sort) - 图5

代码实现

  1. func selectionSort(nums []int) {
  2. for i := range nums {
  3. var minIdx = i
  4. for j := i+1; j <len(nums); j++{
  5. if nums[minIdx] > nums[j] {
  6. minIdx = j
  7. }
  8. }
  9. nums[i], nums[minIdx] = nums[minIdx], nums[i]
  10. }
  11. }