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
}

results matching ""

    No results matching ""