package main import "fmt" func main() { var list = []int{3,4,11,223,4,5,-1,5,4,3,2} insertSort(list) fmt.Println(list) } //通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。可以理解为玩扑克牌时的理牌; // 单指针 func insertSort(arr []int) { n := len(arr) for i := 1; i < n; i++ { temp := arr[i] // 待插入的数据 j:= i-1 for ;j>=0;j--{ fmt.Println(temp,arr[j]) if arr[j] > temp{ arr[j+1] = arr[j] // 外层的每个数都从内层的最后一个数开始对比 如果发现比他小 就把当前位置往后移动 因为最后一个是带插入的位置 已经空出来了 } else { break } } if j+1 !=i { // 最终跳出循环的条件就是找到了一个位置比带插入的数据还大的他一前一个数字 满足的位置是他的后一位 arr[j+1] = temp } } }