时间复杂度:O(n^2)
- 最好:O(n)
 - 最坏:O(n^2)
 如果排序的数据是随机的,根据概率相同原则,平均比较和移动的次数应为n²/4次,得出直接插入排序的时间复杂度为O(n²)。在同样的时间复杂度中直接插入排序要优于选择排序和冒泡排序。 空间复杂度:O(1)
- 只需要一个额外空间用于数据交换
 
原理
直接插入排序(Straight Insertion Sort) 基本操作是:将一个记录插入到已经排好序的有序数据中,从而得到一个新的、记录数增加1的有序表。
实现
把待排序序列视为两部分:
- 一部分为有序序列,通常在排序开始之时将序列中的第一个数据视为一个有序序列;
 - 另一部分为待排序序列,有序序列之后的数据视为待排序序列。
 在排序开始之时,从序列头部到尾部逐个选取数据,与有序序列中的数据,按照从尾部到头部的顺序逐个比较,直到找到合适的位置,将数据插入其中。
// 插入排序,降序排序func InsertSort(slice []int) []int {if len(slice) < 2 {return slice}for i := 1; i < len(slice); i++ {tmp := slice[i]j := i - 1for ; j >= 0; j-- {if tmp >= slice[j] {break}slice[j+1] = slice[j]}slice[j+1] = tmp}return slice}
