选择排序与插入排序

200 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务,点击查看活动详情

题解

选择排序

第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。

以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法

AC Code

func selectSort(arr []int) []int {
   if len(arr) <= 1 {
      return arr
   }
   for i := 0; i < len(arr); i++ { // 最后一个元素就不用选择了
      tmp := arr[i]
      index := i
      for j := i + 1; j < len(arr); j++ {
         if arr[j] > tmp {
            tmp = arr[j]
            index = j
         }
      }
      if index != i {
         arr[index] = arr[i]
         arr[i] = tmp
      }
   }
   return arr
}

插入排序

插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法 [1]  。插入排序是一种最简单的排序方法。

它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动

AC Code

// 插入排序
func insertSort(arr []int) []int {
   for i := 1; i < len(arr); i++ {
      insertValue := arr[i]
      insertIndex := i - 1
      for ; insertIndex >= 0; insertIndex-- {
         if insertValue > arr[insertIndex] {
            break
         }
         arr[insertIndex+1] = arr[insertIndex]
      }
      arr[insertIndex+1] = insertValue
   }
   return arr
}