将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。
从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)
执行代码
package main
import (
"fmt"
)
func insertionSort(arr []int) []int {
for i := range arr { //遍历切片
preIndex := i - 1 //从第二个数开始
current := arr[i]
for preIndex >= 0 && arr[preIndex] > current {
arr[preIndex+1] = arr[preIndex]// 数字大往后移动
preIndex -= 1
}
arr[preIndex+1] = current // 数字小往前移动
}
return arr
}
func main() {
arr := []int{99,1,5,7,9,23,4,78,88,66,54,10,12}
insertionSort := insertionSort(arr)
fmt.Println("insertionSort:",insertionSort)
}
执行结果
insertionSort: [1 4 5 7 9 10 12 23 54 66 78 88 99]