Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import math
- import time
- A = [4,8,19,20,23,28]
- B = [2,3,5,9,12,17]
- m = 5
- n = 5
- k = 0
- while k < (m+n+2):
- #k = input("Enter a k value: ")
- k = k+1
- print "Searching on k = "+`k`
- done = 0
- #check if only one list is used
- if k <= m and A[k-1] <= B[0]:
- print A[k-1]
- done = 1
- if k <= n and B[k-1] <= A[0]:
- print B[k-1]
- done = 1
- #if it gets here it means that both are used
- i = min(k - 1, m)
- ia = max((k - 2) - n, 0)
- ib = i
- j = (k - 2) - i
- #invariant: i+j = k-2
- while done == 0:
- #print `ia`+" "+`i`+"("+`j`+") "+`ib`
- if B[j] < A[i]:
- if j == n:
- print A[i]
- done = 1
- continue
- else:
- if A[i] < B[j+1]:
- print A[i]
- done = 1
- continue
- if A[i] < B[j]:
- if i == m:
- print B[j]
- done = 1
- continue
- else:
- if B[j] < A[i+1]:
- print B[j]
- done = 1
- continue
- if A[i] > B[j]:
- ib = i
- i = int(math.floor((i+float(ia))/2.0))
- j = (k - 2) - i
- if A[i] <= B[j]:
- ia = i
- i = int(math.floor((i+float(ib))/2.0))
- j = (k - 2) - i
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement