<算法导论>练习2.1

2.1-1
在这里插入图片描述

2.1-2

```python
# 重写INSERTION-SORT
# python 下列表从0 开始
def INSERTION_SORT(A):
    for j in range(1,len(A)):
        key=A[j]

        i=j-1
        while i>=0 and A[i]<key:
            A[i+1] = A[i]
            i-=1
        A[i+1]=key
a=[5,2,4,6,1,3]
INSERTION_SORT(a)
print(a)
2.1-3
要求线性查找,只要遍历数组就可以。`

```python
def search(a,v):
    '''
    查找,没有返回null
    :param a:数组
    :param v:要查找的值
    :return:
    '''
    for i,item in enumerate(a):
        if item==v:
            return i
    return 'NIL'
a=[1,2,3,4,5,6,7]
ans=search(a,3)
print(ans)

循环不变式的证明:
初始化:
起始时未对数组A中的元素进行操作
维护:
在第i步中,我们已经知道看a[0,1,…,i-1]都与v不同,所以比较A[i]与v的关系,如果相等就返回i。
终止:
当 i >A.length 时,循环终止,此时已经说明A中所有的元素均已经被检查过了,没有发现与v相同
的值,返回NIL

2.1-4
输入:
两个bool类型的数组A=<a1,a2,…,an>,B=<b1,b2,…,bn>,每个表示以二进制格式存储的整数(每个数字是一个数字,0或1,最低有效位在前),每个长度n。
输出:
一个数组C=<c1,c2,…,cn> ,其中 C’=A’+B’, A’,B’,C’是数组A,B,C中元素

def add_binary(A,B):
    C=[0 for _ in range(len(A)+1)]
    carry=0    # 进位标志
    for i in range(len(A)):
        C[i]=(A[i]+B[i]+carry)%2
        carry=int((A[i]+B[i]+carry)/2)

    C[i+1]=carry   # 有可能会多出一位
    return C

a=[1,0,0]
b=[1,1,1]
c=add_binary(a,b)
print(c)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值