算法

插入排序算法详解
本文深入解析插入排序算法的特性,包括其确定性、可行性及有穷性。通过伪代码展示算法流程,阐述正确的算法应如何在任意输入下得到正确输出,并详细解释循环不变量的概念及其在插入排序中的应用。

算法

算法的特点

  1. Input,output(输入,输出)
  2. Deterministic(确定性)
  3. Feasible(可行性)
  4. Finite(有穷性)

算法的描述

Psudocode(伪代码)
在这里插入图片描述

插入排序:
InserSort(A)
for j←2 to n do//我拿上来的牌就是J
	key←A[j]
	i←j-1//i表示牌的位置
	while i>0 and A[i]>key do
		A[i+1]←A[i]
		i←i-1
	A[i+1]←key
return A

算法的正确性

正确的算法
对任意一个输入,算法能得到一个正确的输出
循环不变量
与程序变量有关的一个语句,它在循环刚开始前,以及在循环的每个迭代执行后为真,特别是在循环结束后,仍然为真。
插入排序的循环不变量
在for循环第j个迭代执行前,子数组A[1```j-1]由最初A[1````j-1]中的元素构成,不过现在是有序的。

我们任何一个算法其实就是一个迭代算法
循环算法和迭代算法其实都是一样的
这个循环变量如何找到?就是最难的地方
在插入排序算法中
for()
在执行第K部的时候,我们前面的A[1]---A[k-1],比如我们排序的目标是由小到大,这些元素保存的就是a[1]---a[k-1]的元素

在这里插入图片描述
我们要找一个最大的数
max=A[i]
在这里插入图片描述
在这里插入图片描述
在我们执行j=k之前,前面的max一定是前面k-1个元素中最大的
当j=n+1时,循环就跳出来了,出来的结果就是前面n个元素中最大的
所以这个就是循环不变量,在循环结束之前都为真

我们来证明一下:
在这里插入图片描述
在这里插入图片描述
在排序算法中,我们的循环不变量可以被作为Lj-1

在这里插入图片描述
插入算法的证明

循环不变量: j=k
Lk-1 A[I]到A[K-1]是有序的
初始步,j=2
L1: A[1]
LK-1 A[I]----A[k-1]
从小到大
在这里插入图片描述
要验证LK对不对
在这里插入图片描述
A[k]=k时,要完成这个迭代
在这里插入图片描述
while循环里面要进行插入,
一定要按照算法来执行

当k=n+1时,循环退出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

向上Claire

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

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

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

打赏作者

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

抵扣说明:

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

余额充值