您的位置 首页 golang

算法基础(golang版本)——插入排序

一。基于以上演绎过程,我们用golang来进行实现:

 func insertion(data []int) {
for j := 1; j < len(data); j++ {
key := data[j]
i := j - 1
for i >= 0 && data[i] > key {
data[i+1] = data[i]
i = i - 1
}
data[i+1] = key
}
}

func main() {
//插入排序算法golang版本
data := []int{5, 2, 4, 6, 1, 3}
fmt.Printf("before sort %v\n", data)
insertion(data)
fmt.Printf("after sort %v\n", data)
}  

二。分析算法过程1.首先for循环里第一行我们将key赋值为data[j],这里取的是data[1],而下标j=1是小于len(data)的,这里就满足了循环不变式成立。

2.此时赋值i=j-1,我们从上面摸牌的过程已经得知,拿到当前的元素与左边的所有的元素进行比较,直到左边的元素不再大于当前元素位置。因此首先我们拿data[1]对比data[0],这里的data[1]=2,而data[0]=5,dats[0]>data[1]满足内循环要求,所以此时进行交换位置,data[i+1]=data[0+1]=data[1]=data[0],也就是将5与2的位置进行交换,同时i=i-1往左偏移再次进行循环判断。此时i=0-1=-1<0不满足循环,因此推出内循环体。

3.最后一步将data[i+1]的位置赋值为key,达到交换的目的。再次进入下一个外循环j++以此类推。

三。算法分析图解

四。总结
插入排序是一个比较有效常用的算法,它的时间复杂度平均是O(n*n),算法并不是说一定得使用时间复杂度以及空间复杂度都非常低的,而是选择性的使用,例如插入排序在少量排序的情况下其效率还是蛮不错的。杀鸡用什么刀取决于实际场景。

文章来源:智云一二三科技

文章标题:算法基础(golang版本)——插入排序

文章地址:https://www.zhihuclub.com/98667.shtml

关于作者: 智云科技

热门文章

网站地图