时间复杂度:O(n^2)

    • 最好:O(n^2)
    • 最坏:O(n^2)

    空间复杂度:O(1)

    • 只需要一个额外空间用于数据交换

    原理
    选择排序(Selection Sort)是从待排序的序列中选出最大值(或最小值),交换该元素与待排序序列头部元素,直到所有待排序的数据元素排序完毕为止。

    实现

    1. 第一趟从 len 个元素的数据序列中选出关键字最小(或最大)的元素并放到最前(或最后)位置。
    2. 下一趟再从 len-1 个元素中选出最小(大)的元素并放到次前(后)位置。
    3. 以此类推,经过 len-1 趟完成排序。

      1. // 选择排序,降序排序
      2. func SelectSort(slice []int) []int {
      3. if len(slice) < 2 {
      4. return slice
      5. }
      6. for i := 0; i < len(slice)-1; i++ {
      7. for j := 1 + i; j < len(slice); j++ {
      8. if slice[i] < slice[j] {
      9. slice[i], slice[j] = slice[j], slice[i]
      10. }
      11. }
      12. }
      13. return slice
      14. }