最近在晚上会看一些算法的东西,最近可能看的比较细外加笔记做得很好。所以弄得比较踏实。 看到排序部分了,插入、冒泡和选择排序,冒泡和选择自己写的比较多,插入排序几乎没怎么写。 所以今晚就自己实现了一份插入排序,写了二十几分钟,陌生的东西写的比较慢,另一个问题是应该提前用笔纸写写画画的,可能实现就会比较顺畅的,问题也出的比较少,以后应该多注意些。

上算法吧

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
var intArr = [10]int{5, 1, 3, 100, 6, 3, 8, 9, 10, 4}

func main() {
	for i := 1; i < 10; i++ {
		j := i - 1
		val := intArr[i]
		for ; j >= 0; j-- {
			if val >= intArr[j] {
				break
			}
			intArr[j+1] = intArr[j]
		}
		intArr[j + 1] = val
	}

	fmt.Println(intArr)
}

说说思路,从第二个位置开始,向前比较,如果数值小于前面的就交换一下,一直交换到大于等于的就停止。一直到结束,上面的写法,实际上是使用了一个哨兵,只是把前面的数字移动到后面,最后一步再把初始的数字放到正确的位置上,减少交换,优化效率。