插入排序算法:直接插入排序
1.简介
插入排序算法思想:将待排序元素分为已排序子集和待排序子集,依次从待排序子集选择一个元素插入到已排序子集中,使已排序子集仍然有序。重复以上过程直到所有元素都有序为止。
排序规则:
- 假总共有n个需要排序,那么待排序有n-1,第1个元素默认有序
- 以索引1切分,前面为有序子集,后面为无序子集
- 将无序子集中取出1个元素a,在将有序子集从前往后与a比较,如果有一个有序子集中数据大于a,从那个开始的所有有序子集元素向偏移1位,在a放入到偏移启始位置。如果有序子集中没有数据大于a,将a放到有序子集末尾
- 重复步骤3直到无序子集为空
2.图示
3.演示
3.1.文件树型图
straight-insertion-sort
├── straight-insertion-sort.go
└── straight-insertion-sort_test.go
3.2.代码
straight-insertion-sort.go
package straight_insertion_sort
// InsertSort 直接插入排序
func InsertSort(arr []int) {
length := len(arr)
for i := 1; i < length; i++ {
t := arr[i]
var j int
for j =i-1;j>=0 && arr[j] > t; j-- {
arr[j+1] = arr[j]
}
arr[j+1] = t
}
}
straight-insertion-sort_test.go
package straight_insertion_sort
import "testing"
func TestInsertSort(t *testing.T) {
arr := []int{24, 12, 34, 20, 53}
InsertSort(arr)
t.Log(arr)
}
3.3.测试
=== RUN TestInsertSort
straight-insertion-sort_test.go:8: [12 20 24 34 53]
--- PASS: TestInsertSort (0.00s)
PASS
4.参考
- 《C/C++函数与算法速查手册》