原理
- 从头开始遍历列表
- 对每一个元素,都向前遍历移动,直到移动到正确的位置。
- 遍历下标之前的元素都是有序的,直到遍历到最后一个元素,整个列表都是有序的了
时间复杂度:
- 平均 O ( N 2 / 4 ) O(N^2/4) O(N2/4)
- 最好 O ( N − 1 ) O(N-1) O(N−1)
- 最差
O
(
N
2
/
2
)
O(N^2/2)
O(N2/2)
空间复杂度: O ( 1 ) O(1) O(1)
实现
// 定义接口
type Comparable interface {
CompareTo(interface{}) int
}
// 定义类型并实现接口
type Int int
func (i Int) CompareTo(i2 Int) int {
i2tmp := int(i2)
iTmp := int(i)
if iTmp > i2tmp {
return 1
} else if iTmp < i2tmp {
return -1
} else {
return 0
}
}
// 插入排序
// s : 输入
// flag : true-从小到大,false-从大到小
// return:输出
func InsertSort(s []Int, flag bool) []Int {
l := len(s)
for i := 1; i < l; i++ {
for j := i; j > 0; j-- {
if flag && s[j].CompareTo(s[j-1]) < 0 || !flag && s[j].CompareTo(s[j-1]) > 0 {
s[j], s[j-1] = s[j-1], s[j]
}else{
// 元素移动到指定位置后,不再继续遍历
break
}
}
}
return s
}