2.1-2
伪代码
for j=2 to A.length:
key=A[j]
i=j-1
while j>0 and A[i]<key:
A[i+1]=A[i]
i=i-1
A[i+1]=key
2.1-3
题中未提查找出所有与v相等的值,所以如下伪代码也合理
for i=1 to A.length
if A[i]==v:
print i
break
print NIL
循环不变式:
初始:当i=1时,查找A[1]是否等于v,若等于v则终止
保持:当i=k时,由于k之前的都已经对比过了,所以接下来只用比较k和k之后的,若A[k]等于v,则终止;
终止:当找到v=A[i]时,终止,达到算法目的,i>A.length时还未找到v=A[i], 则v的值仍然为NIL,满足输出要求。
2.1-4
算法描述:
1、先将C数组全部置为0;
2、从数组A、B、C从最后一位向前位依次相加
3、若和为3则使C的当前位为1,上一位为1
若和为2则使C的当前位为1,上一位为0
若和为1则使C的当前位为1
若和为0则使C的当前位为0(即保持不变)
伪代码:
将C所有元素置0
for i=A.lenght to 0:
s=i+1
if A[i]+B[i]+C[s]==3
c[s]=1
c[s-1]=1
else if A[i]+B[i]+C[s]==2
c[s]=0
c[s-1]=1
else if A[i]+B[i]+C[s]==1
c[s]=1
else
c[s]=0
i=i-1
本文详细解析了《算法导论》中的三个经典算法题目,包括插入排序的伪代码实现、查找数组中特定值的改进算法及其实现,以及两个二进制数相加的算法描述与伪代码。通过这些解析,读者可以深入了解算法的设计思想和实现细节。
1117

被折叠的 条评论
为什么被折叠?



