插入排序逻辑就是从第二个元素开始比较与前面元素的大小,比它大就交换,然后移动指针。
第一种临界条件:
比如比较 5 2 1
第二种临界条件:
上面的1 2 5 插入一个3
第一次比较比5 小 ,交换 1 2 3 5 j--之后j=2 此时继续发现 j (3) 大于 j -1 (2)
注意 !!!
下面代码中的为切片类型,是引用类型,如果是数组类型的值,记得在交换的时候使用指针来操作
func InsertionSort(s []int) {
n := len(s)
if n < 2 {
return
}
//默认的0位置上的指排好序的
for i := 1; i < n; i++ {
//这其中i就是当前我操作的元素的下标
//判断当前元素于它的前一个
for j := i; j > 0 && s[j] < s[j - 1]; j-- {
swap(s, j, j - 1)
}
}
}
func swap(slice []int, i int, j int) {
slice[i], slice[j] = slice[j], slice[i]
}