排序算法:直接插入排序

插入排序算法:直接插入排序

1.简介

插入排序算法思想:将待排序元素分为已排序子集和待排序子集,依次从待排序子集选择一个元素插入到已排序子集中,使已排序子集仍然有序。重复以上过程直到所有元素都有序为止。

排序规则:

  1. 假总共有n个需要排序,那么待排序有n-1,第1个元素默认有序
  2. 以索引1切分,前面为有序子集,后面为无序子集
  3. 将无序子集中取出1个元素a,在将有序子集从前往后与a比较,如果有一个有序子集中数据大于a,从那个开始的所有有序子集元素向偏移1位,在a放入到偏移启始位置。如果有序子集中没有数据大于a,将a放到有序子集末尾
  4. 重复步骤3直到无序子集为空

2.图示

insert_sort

3.演示

GitHub

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++函数与算法速查手册》
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yimtcode

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值