随笔记录,插入排序算法,从小到大排序, 算法的核心思想,从一个待排序的数据中选取第一个作为 已排序好的数据集 ,接下来从未排序的数据中也就是第二数据开始,从大到小,从右向左比较,查看数据带 待排数据是否小于已排好序的数据,如果小则大的数据向右也就是向后移动,直到条件结束,插入待排序数据即可,(需要提前保存一下,否则会丢失) j– 会造成多操作一次,保存数据的是否list[j+1]。接下来遍历处理全部数据即可完成排序。
func TestSortInsert(t *testing.T) {
list := []int{15, 20, 10, 30, 50, 18, 5, 45}
fmt.Println("origin", list)
n := len(list)
// 进行 N-1 轮迭代
for i := 1; i <= n-1; i++ {
deal := list[i] // 待排序的数
j := i - 1 // 待排序的数左边的第一个数的位置
// 如果第一次比较,比左边的已排好序的第一个数小,那么进入处理
// 一直往左边找,比待排序大的数都往后挪,腾空位给待排序插入
for ; j >= 0 && deal < list[j]; j-- {
list[j+1] = list[j] // 某数后移,给待排序留空位
}
list[j+1] = deal // 结束了,待排序的数插入空位
}
fmt.Println("result", list)
}