题目
考虑以下查找问题:
输入: n个数的一个序列
A={ a1, a2, ..., an }
和一个值
v
。
输出: 下标
写出线性查找 的伪代码,它扫描整个序列来查找
解答
注意:自己写的,不是标准答案,欢迎交流
伪代码:
FIND-KEY(A, v)
for i = 1 to A.length
if A[i] == v
return i
return NIL
循环不变式:对于每次循环迭代,子数组(已遍历的元素)中没有与v相等的值。
初始化:第一次循环之前,i = 1,子数组没有元素,其中肯定没有与v相等的值,循环不变式成立。
保持:每次迭代都将比较A[i]与v的值,如果相等,循环终止;如果不等,A[1…i]中没有与v相等的值,循环不变式保持。
终止:当i > A.length 时或者A[i] == v 时循环终止。显然对于子数组即下标小于i的所有元素均没有与v相等的值,算法正确。