算法导论课后习题(部分)

2.1-2:

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

2.1-4:

在这里插入图片描述

2.2-2

for i = 1 to n-1:
   minindex = i
   minum =for j = i to n:
       if A[i] <= minum:
       	   minum = A[i]
       	   minindex = i
       A[i] <=> A[minindex]

循环不变式:

考虑插入排序的循环不变式:for 循环每次迭代开始时,子数组A[1…j-1]由原来在A[1…j-1]中的元素组成,但以按序排列
本题的循环不变式:对于每一个外层循环开始迭代时,A[1…i-1]都已经得到赋值,保存着最小的i-1个数,并且已经排好序;A[i]等于A[i…n]中的最小值。

只需求前n-1:

访问到第n个时,A[n]已经是A[n…n]中的最大值,不需要修改。

用θ记号给出选择排序的最好情况和最坏情况运行时间

最好:θ(n) 每一个位置都不需要更新
最坏:θ(n2)第i个位置,需要访问n-i次,一共有n-1个i

2.3-6

for j = 2 to n:
    A[0] = A[j]
    idx = j/2  # (1+j-1)/2
    if A[idx] > A[j]:  # 前半部分
    	while idx >= 0 and A[idx] > A[j]:
    	    A[idx+1]  

伪码写到一般,在发现不可以(为什么我一开始没思考呢。。。)
不可以:插入排序算法的时间复杂度(θ(n2))主要依赖于,查找下标时的元素比较,以及过程中进行的元素移动。如果使用二分查找,元素比较次数平均减少一半,而元素移动次数不变,因此时间复杂度仍然是θ(n2)。

3-2

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值