算法导论习题(持续更新)

算法导论 华章第三版 习题
##练习题2.1-2
重写过程INSERTION-SORT,使之按非升序排序。
伪代码思路1:

for j=A.length-1 to 1
	key=A[j]
	i=j+1
	while i<A.length+1 and A[i]>k
		A[i-1]=A[i]
		i=i+1
	A[i-1]=key

所有排好序的序列都放在数组A的右边,从右到左遍历整个A,将其插入到右面有序的序列中
伪代码思路2:
所有排好序的序列仍然都放在数组A的左边,

for j=2 to A.length
	key=A[j]
	i=j-1
	while i>0 and A[i]<key
		A[i+1]=A[i]
		i=i-1
	A[i+1]=key

##练习题2.1-3
考虑以下查找问题:
输入:n个数的一个序列A=<a1,a2,…,an>和一个值v。
输出:下标i使得v=A[i]或者当v不在A中出现时,v为特殊值NIL。
写出线性查找的伪代码,它扫描整个序列来查找v。使用一个循环不变式来证明你的算法是正确的。确保你的循环不变式满足三条必要的性质。

for i=1 to A.length
	if A[i]==v
		return i
return NIL

##练习题2.1-4
考虑把两个n位二进制整数加起来的问题,这两个整数分别存储在两个n元数组A和B中。这两个整数的和应按二进制形式存储在一个(n+1)元数组C中。请给出该问题的形式化描述,并写出伪代码。

for i=1 to n
	val =A[i]+B[i]
	if val==0
		C[i]+=0
	else if val==1
		C[i]+=1
	else if val==2
		C[i]+=0
		C[i+1]+=1
	else if val==3
		C[i]+=1
		C[i+1]+=1

##练习题2.2-2
考虑排序存储在数组A中的n个数:首先找出A中的最小元素并将其与A[1]中的元素进行交换。接着,找出A种的次最小元素并将其与A[2]中的元素进行交换。对A中前n-1个元素按该方式继续。该算法成为选择算法,写出其伪代码。该算法维持的循环不变式是什么?为什么它只需要对前n-1个元素,而不是对所有n个元素运行,用theta记号给出选择排序的最好情况与最坏情况运行时间。

min=+inv
for i=1 to n-1
	for j=i to n-1
		if A[j]<min
			min=A[j]
			j_min=j
	exchange=A[i]
	A[i]=A[j_min]
	A[j_min]=exchange
theta(n方)???
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值