1. 经典排序
1.1. 插入排序
- 时间复杂度 O(n^2),空间复杂度 O(1)
- 理解很简单,写起来有点绕
- 逐步往后选取一个数,然后把该数与之前的排好的进行比较,如果比某个大,就插入到该数的后面
显示代码
func insertion(nums []int) []int {
// 自己写法
numLen := len(nums)
for i:=1;i<numLen;i++ {
// 定义一个临时变量取当前的值
temp := nums[i]
// 把该值与该值之前的数进行比较
for j:=i-1;j>=0;j-- {
// 当当前值比之前的某个值大,那么插入,否则把每个值往后移一位
if temp > nums[j] {
nums[j+1] = temp
break
} else {
nums[j+1] = nums[j]
}
// 如果都移动了,然后遍历到0了,说明当前值是最小的,把当前值放到最小的位置
if j == 0 {
nums[0] = temp
}
}
}
// 网上写法
//for i := range nums {
// preIndex := i - 1
// current := nums[i]
// for preIndex >= 0 && nums[preIndex] > current {
// nums[preIndex+1] = nums[preIndex]
// preIndex -= 1
// }
// nums[preIndex+1] = current
//}
return nums
}