插入排序是指每次将一个待排序的元素与已排序的元素进行逐一比较,直到找到合适的位置按大小插入。
时间复杂度
最好情况:数组本身就是有序的,只需要遍历一遍即可,所以时间复杂度是O(N);最坏情况:数组是倒序的,此时时间复杂度为O(N^2)
算法思想
插入排序从第二个元素开始向后移动,每次选定当前元素作为标定元素,为最大元素,然后向前进行比较,如果元素比标定元素大,就把元素往后移动一位,直到找到比标定元素小的元素或者移动到了数组最左端,然后将标定元素插入到当前元素的后一个位置,直到到最后一个元素,向前进行比较,比较完成插入最后一个元素后,此时数组就已经完全有序了。
代码实现
package main
import "fmt"
func insertionSort(arr []int) {
for i := 1; i < len(arr); i++ {
key := arr[i]
j := i - 1
for ; j >= 0 && arr[j] > key; j-- {
arr[j+1] = arr[j]
}
arr[j+1] = key
}
}
func main() {
arr := []int{5, 2, 7, 6, 1, 4, 3}
insertionSort(arr)
fmt.Println(arr)
}