插入排序的时间复杂度,正常情况会低于冒泡和选择,最坏的情况,等于冒泡和选择
理论部分
插入排序,就是新创建一个数组,将旧数组中的数据,挨个插入到新数组中,在插入的时候,放在正确的位置。
步骤如下:
初始化原始数组sort_init
初始化新数组 resList
1,从原始数组的1号位开始取数
将其插入到resList中
2,继续
3,继续取出
并从后往前,与 resList 的元素比较,遇到小于或者等于4的元素,则插入到此元素后面,并跳出本次循环
代码部分
func InsertSort() {
// 数组初始化
sort_init := []int{5, 7, 9, 4, 8, 3, 1, 2, 6, 3}
resList := []int{sort_init[0]}
// iter_print(resList...)
for i := 1; i < len(sort_init); i++ {
middleNum := sort_init[i]
iter_print(resList...)
for j := i - 1; j >= 0; j-- {
if resList[j] <= middleNum {
if j == i-1 {
resList = append(resList, middleNum)
} else {
tmp := append([]int{}, resList[j+1:]...)
resList = append(resList[:j+1], middleNum)
resList = append(resList, tmp...)
}
break
}
// 如果将resList全部遍历完,所有元素都大于middleNum,则将其插入到resList的最前面
if j == 0 {
resList = append([]int{middleNum}, resList...)
}
}
}
iter_print(resList...)
}
// 打印数组
func iter_print(sort_list ...int) {
for i := 0; i < len(sort_list); i++ {
print(sort_list[i], " ")
}
println()
}