《算法笔记》4.1.2 节 —— 插入排序

​ 插入排序是最简单的一类排序方法,也是笔者在学习《算法笔记》的过程中,第一个感觉需要细心研究的排序方法

相比于选择排序和冒泡排序来讲,选择排序对数组操作的要求上升了一个等级,个人认为对入门算法有很好的启蒙作用。


原理阐释:

我们先避开概念不谈,直接来看一个实例:

这里有一个顺序混乱的整型数组 { 5 , 2 , 4 , 6 , 3 , 1 } \{5,2,4,6,3,1\} {5,2,4,6,3,1} 我们将按照插入排序的方法对其进行排序

我们假设前面的单个数字 5 是有序的后面的数字皆为无序,那我们所做的工作即为把仍无序的数字依次提出并插入到已经

有序的序列中,并将无序的部分后移,让出有序部分的空间。

(希望读者在阅读下面这段过程时不要抱怨繁琐而跳过,我们只有充分理解过程,才能将其转化为代码)

第一步:这时 5 已经有序,我们将 5 后移堵盖 2 ,并把 2 插入到最前面。
在这里插入图片描述

第二步:这时 2 5 已经有序,我们将 5 后移覆盖 4 ,并把 4 插入到 2 后面。
在这里插入图片描述

第三步:这时 2 4 5 已经有序,6 不动。
在这里插入图片描述

第四步:这时 2 4 5 6 已经有序,我们将 4 5 6 后移覆盖 3 ,并把 3 插入到 2 后面。
在这里插入图片描述

第五步:这时 2 3 4 5 6 已经有序,我们把 2 3 4 5 6 后移覆盖 1 ,并把 1 插入最前面。
在这里插入图片描述

​ 这时,我们一共进行了五步,就将无序数组的排序完成了,细心的读者可以发现上面这段描述中,我把“后移” 放

到了“插入”之前,并且插入时,我只选择插入到某数之后或最前面,这与我们接下来所要进行的代码实现有关。


代码实现:

通过上面的例子,读者应该对选择排序有了基本的了解,那么我们从代码入手

int A[maxn], n;//排序范围为数组下标(0~n)
void InsertSort()
{
	for (int i = 1; i <= n; i++)
	{
		int temp = A[i], j = i;//先将需要插入的数储存到temp中
		while (j > 0 && temp < A[j - 1])
		{
			A[j] = A[j - 1];//后移过程
			j--;
		}
		A[j] = temp;//跳出循环后最终插入
	}
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值