题目描述
插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
算法复杂度
插入排序为稳定排序
平均复杂度为O(n²)
最坏复杂度为O(n²)
最好复杂度为O(n)
解题思路
- 挨着遍历数列,前边为排好得,后边为未排的
- 取到一个未排序的数,和前一个数比较,前一个数大,将前一个数向后移一位
- 直到前一个数不大于当前未排序的数,将该数插入当前位置
- 重复该步骤n-1次,将全部数归位
代码实现
func main() {
arr:= []int{7, 5, 4, 3, 6, 1, 0}
fmt.Println(insertionSort(arr))
}
func insertionSort(arr []int) []int {
for i := 1; i < len(arr); i++ {
j := i - 1
cur := arr[i]
for j >= 0 && arr[j] > cur {
arr[j+1] = arr[j]
j--
}
arr[j+1] = cur
}
return arr
}