mirror of
https://github.com/kmc7468/cs220.git
synced 2025-12-15 22:48:45 +00:00
Assignment 5 Done
This commit is contained in:
@@ -18,6 +18,20 @@ module BinarySearch
|
||||
ensures { forall i: int. result <= i < length a -> v <= a[i] }
|
||||
=
|
||||
(* IMPORTANT: DON'T MODIFY THE ABOVE LINES *)
|
||||
0 (* TODO *)
|
||||
let ref l = 0 in
|
||||
let ref r = length a in
|
||||
while l < r do
|
||||
invariant { 0 <= l <= length a /\ 0 <= r <= length a }
|
||||
invariant { forall i: int. 0 <= i < l -> a[i] < v }
|
||||
invariant { forall i: int. r <= i < length a -> a[i] >= v }
|
||||
variant { r - l }
|
||||
let m = l + div (r - l) 2 in
|
||||
assert { l <= m < r };
|
||||
if a[m] < v then
|
||||
l := m + 1
|
||||
else
|
||||
r := m
|
||||
done;
|
||||
l
|
||||
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user