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)